0x608060405234801561001057600080fd5b50600436106102275760003560e01c806379cc679011610130578063aa2d0100116100b8578063caad546e1161007c578063caad546e146106e8578063cb1a2a7714610718578063cd5599ad14610734578063dd62ed3e14610764578063f2fde38b1461079457610227565b8063aa2d010014610620578063adc9772e1461063c578063b31137361461066c578063c2a672e01461069c578063c7521922146106cc57610227565b8063a08fbe57116100ff578063a08fbe5714610556578063a457c2d714610572578063a5f1e282146105a2578063a779d080146105d2578063a9059cbb146105f057610227565b806379cc6790146104ce5780637b16e15f146104ea5780638da5cb5b1461051a57806395d89b411461053857610227565b8063399080ec116101b3578063617b8ced11610182578063617b8ced1461041857806370a0823114610434578063715018a614610464578063718489c51461046e578063795b81a81461049e57610227565b8063399080ec1461036c5780633a3dbc9a1461039c5780633fe9c253146103cc57806342966c68146103fc57610227565b806318160ddd116101fa57806318160ddd146102b45780631cc6b7d4146102d257806323b872dd146102ee578063313ce5671461031e578063395093511461033c57610227565b806306fdde031461022c578063095ea7b31461024a5780630dc47c3c1461027a578063116d872b14610296575b600080fd5b6102346107b0565b6040516102419190613b48565b60405180910390f35b610264600480360381019061025f919061364c565b610842565b6040516102719190613b2d565b60405180910390f35b610294600480360381019061028f919061364c565b610860565b005b61029e6109a4565b6040516102ab9190613e0a565b60405180910390f35b6102bc6109aa565b6040516102c99190613e0a565b60405180910390f35b6102ec60048036038101906102e7919061364c565b6109b4565b005b610308600480360381019061030391906135fd565b610aee565b6040516103159190613b2d565b60405180910390f35b610326610b74565b6040516103339190613e25565b60405180910390f35b6103566004803603810190610351919061364c565b610b7d565b6040516103639190613b2d565b60405180910390f35b61038660048036038101906103819190613598565b610c29565b6040516103939190613e0a565b60405180910390f35b6103b660048036038101906103b191906135c1565b610cb2565b6040516103c39190613e0a565b60405180910390f35b6103e660048036038101906103e19190613598565b610d4b565b6040516103f39190613e0a565b60405180910390f35b610416600480360381019061041191906136ed565b610d94565b005b610432600480360381019061042d919061364c565b610e50565b005b61044e60048036038101906104499190613598565b610f62565b60405161045b9190613e0a565b60405180910390f35b61046c610faa565b005b61048860048036038101906104839190613598565b611032565b6040516104959190613b2d565b60405180910390f35b6104b860048036038101906104b39190613598565b61113d565b6040516104c59190613e25565b60405180910390f35b6104e860048036038101906104e3919061364c565b61120f565b005b61050460048036038101906104ff9190613598565b6112cd565b6040516105119190613e0a565b60405180910390f35b61052261136a565b60405161052f9190613ab2565b60405180910390f35b610540611394565b60405161054d9190613b48565b60405180910390f35b610570600480360381019061056b9190613688565b611426565b005b61058c6004803603810190610587919061364c565b6114fe565b6040516105999190613b2d565b60405180910390f35b6105bc60048036038101906105b79190613598565b6115e9565b6040516105c99190613e0a565b60405180910390f35b6105da61164c565b6040516105e79190613e0a565b60405180910390f35b61060a6004803603810190610605919061364c565b611656565b6040516106179190613b2d565b60405180910390f35b61063a60048036038101906106359190613598565b611678565b005b6106566004803603810190610651919061364c565b61174f565b6040516106639190613b2d565b60405180910390f35b61068660048036038101906106819190613598565b611993565b6040516106939190613e25565b60405180910390f35b6106b660048036038101906106b1919061364c565b6119b3565b6040516106c39190613b2d565b60405180910390f35b6106e660048036038101906106e19190613598565b611b7d565b005b61070260048036038101906106fd9190613598565b611c54565b60405161070f9190613e0a565b60405180910390f35b610732600480360381019061072d919061364c565b611c9d565b005b61074e60048036038101906107499190613598565b611daf565b60405161075b9190613e0a565b60405180910390f35b61077e600480360381019061077991906135c1565b611df8565b60405161078b9190613e0a565b60405180910390f35b6107ae60048036038101906107a99190613598565b611e7f565b005b6060600380546107bf9061400f565b80601f01602080910402602001604051908101604052809291908181526020018280546107eb9061400f565b80156108385780601f1061080d57610100808354040283529160200191610838565b820191906000526020600020905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b600061085661084f611f8d565b8484611f95565b6001905092915050565b61086861136a565b73ffffffffffffffffffffffffffffffffffffffff16610886611f8d565b73ffffffffffffffffffffffffffffffffffffffff1614806108f85750600660006108af611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90613d4a565b60405180910390fd5b6109418282612160565b61094b82826122c0565b6a52b7d2dcc80cd2e400000061095f6109aa565b11156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790613d8a565b60405180910390fd5b5050565b600c5481565b6000600254905090565b6109bc61136a565b73ffffffffffffffffffffffffffffffffffffffff166109da611f8d565b73ffffffffffffffffffffffffffffffffffffffff161480610a4c575060066000610a03611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8290613d4a565b60405180910390fd5b610a958282612160565b6a52b7d2dcc80cd2e4000000610aa96109aa565b1115610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613d8a565b60405180910390fd5b5050565b6000610afb8484846123da565b610b0684848461265b565b6000610b128533611df8565b9050610b688533610b63866040518060400160405280601f81526020017f45524332303a205452414e534645525f414d4f554e545f455843454544454400815250866129f29092919063ffffffff16565b611f95565b60019150509392505050565b60006012905090565b6000610c1f610b8a611f8d565b848460016000610b98611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c1a9190613e72565b611f95565b6001905092915050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610d4283858360000154612a47565b91505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d9d81612b34565b610def81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b4890919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e4781600c54612b4890919063ffffffff16565b600c8190555050565b610e58611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610e7661136a565b73ffffffffffffffffffffffffffffffffffffffff1614610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec390613c6a565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ffbd482c9dea78c178879b07a2daa165a1348ac031421bb9917d8734de948fca382604051610f569190613e0a565b60405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb2611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610fd061136a565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90613c6a565b60405180910390fd5b6110306000612b5e565b565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006110c9338584600001548560010154612c24565b90506110da33858460000154612ca4565b6110e43382612db1565b3373ffffffffffffffffffffffffffffffffffffffff167f9b0d7ec397f0d7459574b710fa67fcdfc3d3c80ca2d0c1a84a67dd566464b2988260405161112a9190613e0a565b60405180910390a2600192505050919050565b6000611147611f8d565b73ffffffffffffffffffffffffffffffffffffffff1661116561136a565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b290613c6a565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112198282612ede565b61126b81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b4890919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112c381600c54612b4890919063ffffffff16565b600c819055505050565b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611362338483600001548460010154612c24565b915050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546113a39061400f565b80601f01602080910402602001604051908101604052809291908181526020018280546113cf9061400f565b801561141c5780601f106113f15761010080835404028352916020019161141c565b820191906000526020600020905b8154815290600101906020018083116113ff57829003601f168201915b5050505050905090565b61142e611f8d565b73ffffffffffffffffffffffffffffffffffffffff1661144c61136a565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613c6a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b6000806001600061150d611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c190613daa565b60405180910390fd5b6115de6115d5611f8d565b85858403611f95565b600191505092915050565b6000611645600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461163784610f62565b612b4890919063ffffffff16565b9050919050565b6000600c54905090565b60006116633384846123da565b61166e33848461265b565b6001905092915050565b611680611f8d565b73ffffffffffffffffffffffffffffffffffffffff1661169e61136a565b73ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90613c6a565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613dca565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90613d2a565b60405180910390fd5b61185f833384612f59565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006118f5338684600001548560010154612c24565b90506119183386611913878660000154611f7790919063ffffffff16565b612ca4565b6119223382612db1565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc21b429107df2ac940fc444798554039f5c34696739d39ef7d39fa0abb4a9fc78660405161197f9190613e0a565b60405180910390a360019250505092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008082116119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613c2a565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154831115611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590613bea565b60405180910390fd5b6000611ad4338684600001548560010154612c24565b9050611af73386611af2878660000154612b4890919063ffffffff16565b612ca4565b611b013382612db1565b611b0c853386612f8b565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f1ddc13fab879f36a0016ded03412386f11de571437df12605dc0607742bd82c286604051611b699190613e0a565b60405180910390a360019250505092915050565b611b85611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611ba361136a565b73ffffffffffffffffffffffffffffffffffffffff1614611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090613c6a565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ca5611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611cc361136a565b73ffffffffffffffffffffffffffffffffffffffff1614611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613c6a565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ff9e78c7139f74364fb9b5b2436f77a147d31022fa52e053f0da12a2de3ea5a6382604051611da39190613e0a565b60405180910390a25050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e87611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611ea561136a565b73ffffffffffffffffffffffffffffffffffffffff1614611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613c6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613baa565b60405180910390fd5b611f7481612b5e565b50565b60008183611f859190613e72565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffc90613cea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90613bca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121539190613e0a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790613dea565b60405180910390fd5b6121dc60008383612fbb565b80600260008282546121ee9190613e72565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122439190613e72565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122a89190613e0a565b60405180910390a36122bc60008383612fc0565b5050565b61231281600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f7790919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061236a81600c54611f7790919063ffffffff16565b600c819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb5a2a645ea10b3aaf0b61965c340be4cf9ef443e7e784f656b3119e9f4dd130d836040516123ce9190613e0a565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244190613cca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b190613b6a565b60405180910390fd5b6124c5838383612fbb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290613c0a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125de9190613e72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126429190613e0a565b60405180910390a3612655848484612fc0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c290613cca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290613b6a565b60405180910390fd5b6127a7816040518060600160405280602f8152602001614687602f9139600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129f29092919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061283c81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f7790919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614156129885761292981600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b4890919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298181600c54612b4890919063ffffffff16565b600c819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb5a2a645ea10b3aaf0b61965c340be4cf9ef443e7e784f656b3119e9f4dd130d836040516129e59190613e0a565b60405180910390a3505050565b6000838311158290612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a319190613b48565b60405180910390fd5b5082840390509392505050565b600080612a53846115e9565b90506000612aa984600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b90506000612b19600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0b670de0b6b3a764000086612fc590919063ffffffff16565b612fdb90919063ffffffff16565b905080821115612b27578091505b8193505050509392505050565b612b45612b3f611f8d565b82612ff1565b50565b60008183612b569190613f53565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080612c32858786612a47565b90506000612c498442612b4890919063ffffffff16565b90506000612c7a670de0b6b3a7640000612c6c8486612fc590919063ffffffff16565b612fdb90919063ffffffff16565b90506000612c87896115e9565b905080821115612c95578091505b81945050505050949350505050565b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b6000612e1f82612e11600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e0387610f62565b612b4890919063ffffffff16565b612b4890919063ffffffff16565b1015612e2a57600080fd5b612e7c81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f7790919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ed481600c54611f7790919063ffffffff16565b600c819055505050565b6000612ef183612eec611f8d565b611df8565b905081811015612f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2d90613c8a565b60405180910390fd5b612f4a83612f42611f8d565b848403611f95565b612f548383612ff1565b505050565b612f868230838673ffffffffffffffffffffffffffffffffffffffff166131c8909392919063ffffffff16565b505050565b612fb682828573ffffffffffffffffffffffffffffffffffffffff166132519092919063ffffffff16565b505050565b505050565b505050565b60008183612fd39190613ef9565b905092915050565b60008183612fe99190613ec8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305890613caa565b60405180910390fd5b61306d82600083612fbb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ea90613b8a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461314a9190613f53565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131af9190613e0a565b60405180910390a36131c383600084612fc0565b505050565b61324b846323b872dd60e01b8585856040516024016131e993929190613acd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506132d7565b50505050565b6132d28363a9059cbb60e01b8484604051602401613270929190613b04565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506132d7565b505050565b6000613339826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661339e9092919063ffffffff16565b9050600081511115613399578080602001905181019061335991906136c4565b613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90613d6a565b60405180910390fd5b5b505050565b60606133ad84846000856133b6565b90509392505050565b6060824710156133fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f290613c4a565b60405180910390fd5b613404856134ca565b613443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343a90613d0a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161346c9190613a9b565b60006040518083038185875af1925050503d80600081146134a9576040519150601f19603f3d011682016040523d82523d6000602084013e6134ae565b606091505b50915091506134be8282866134dd565b92505050949350505050565b600080823b905060008111915050919050565b606083156134ed5782905061353d565b6000835111156135005782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135349190613b48565b60405180910390fd5b9392505050565b6000813590506135538161462a565b92915050565b60008151905061356881614641565b92915050565b60008135905061357d81614658565b92915050565b6000813590506135928161466f565b92915050565b6000602082840312156135aa57600080fd5b60006135b884828501613544565b91505092915050565b600080604083850312156135d457600080fd5b60006135e285828601613544565b92505060206135f385828601613544565b9150509250929050565b60008060006060848603121561361257600080fd5b600061362086828701613544565b935050602061363186828701613544565b92505060406136428682870161356e565b9150509250925092565b6000806040838503121561365f57600080fd5b600061366d85828601613544565b925050602061367e8582860161356e565b9150509250929050565b6000806040838503121561369b57600080fd5b60006136a985828601613544565b92505060206136ba85828601613583565b9150509250929050565b6000602082840312156136d657600080fd5b60006136e484828501613559565b91505092915050565b6000602082840312156136ff57600080fd5b600061370d8482850161356e565b91505092915050565b61371f81613f87565b82525050565b61372e81613f99565b82525050565b600061373f82613e40565b6137498185613e56565b9350613759818560208601613fdc565b80840191505092915050565b600061377082613e4b565b61377a8185613e61565b935061378a818560208601613fdc565b613793816140ce565b840191505092915050565b60006137ab602383613e61565b91506137b6826140df565b604082019050919050565b60006137ce602283613e61565b91506137d98261412e565b604082019050919050565b60006137f1602683613e61565b91506137fc8261417d565b604082019050919050565b6000613814602283613e61565b915061381f826141cc565b604082019050919050565b6000613837601e83613e61565b91506138428261421b565b602082019050919050565b600061385a602683613e61565b915061386582614244565b604082019050919050565b600061387d601a83613e61565b915061388882614293565b602082019050919050565b60006138a0602683613e61565b91506138ab826142bc565b604082019050919050565b60006138c3602083613e61565b91506138ce8261430b565b602082019050919050565b60006138e6602483613e61565b91506138f182614334565b604082019050919050565b6000613909602183613e61565b915061391482614383565b604082019050919050565b600061392c602583613e61565b9150613937826143d2565b604082019050919050565b600061394f602483613e61565b915061395a82614421565b604082019050919050565b6000613972601d83613e61565b915061397d82614470565b602082019050919050565b6000613995601983613e61565b91506139a082614499565b602082019050919050565b60006139b8602183613e61565b91506139c3826144c2565b604082019050919050565b60006139db602a83613e61565b91506139e682614511565b604082019050919050565b60006139fe601c83613e61565b9150613a0982614560565b602082019050919050565b6000613a21602583613e61565b9150613a2c82614589565b604082019050919050565b6000613a44601583613e61565b9150613a4f826145d8565b602082019050919050565b6000613a67601f83613e61565b9150613a7282614601565b602082019050919050565b613a8681613fc5565b82525050565b613a9581613fcf565b82525050565b6000613aa78284613734565b915081905092915050565b6000602082019050613ac76000830184613716565b92915050565b6000606082019050613ae26000830186613716565b613aef6020830185613716565b613afc6040830184613a7d565b949350505050565b6000604082019050613b196000830185613716565b613b266020830184613a7d565b9392505050565b6000602082019050613b426000830184613725565b92915050565b60006020820190508181036000830152613b628184613765565b905092915050565b60006020820190508181036000830152613b838161379e565b9050919050565b60006020820190508181036000830152613ba3816137c1565b9050919050565b60006020820190508181036000830152613bc3816137e4565b9050919050565b60006020820190508181036000830152613be381613807565b9050919050565b60006020820190508181036000830152613c038161382a565b9050919050565b60006020820190508181036000830152613c238161384d565b9050919050565b60006020820190508181036000830152613c4381613870565b9050919050565b60006020820190508181036000830152613c6381613893565b9050919050565b60006020820190508181036000830152613c83816138b6565b9050919050565b60006020820190508181036000830152613ca3816138d9565b9050919050565b60006020820190508181036000830152613cc3816138fc565b9050919050565b60006020820190508181036000830152613ce38161391f565b9050919050565b60006020820190508181036000830152613d0381613942565b9050919050565b60006020820190508181036000830152613d2381613965565b9050919050565b60006020820190508181036000830152613d4381613988565b9050919050565b60006020820190508181036000830152613d63816139ab565b9050919050565b60006020820190508181036000830152613d83816139ce565b9050919050565b60006020820190508181036000830152613da3816139f1565b9050919050565b60006020820190508181036000830152613dc381613a14565b9050919050565b60006020820190508181036000830152613de381613a37565b9050919050565b60006020820190508181036000830152613e0381613a5a565b9050919050565b6000602082019050613e1f6000830184613a7d565b92915050565b6000602082019050613e3a6000830184613a8c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613e7d82613fc5565b9150613e8883613fc5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ebd57613ebc614041565b5b828201905092915050565b6000613ed382613fc5565b9150613ede83613fc5565b925082613eee57613eed614070565b5b828204905092915050565b6000613f0482613fc5565b9150613f0f83613fc5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4857613f47614041565b5b828202905092915050565b6000613f5e82613fc5565b9150613f6983613fc5565b925082821015613f7c57613f7b614041565b5b828203905092915050565b6000613f9282613fa5565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613ffa578082015181840152602081019050613fdf565b83811115614009576000848401525b50505050565b6000600282049050600182168061402757607f821691505b6020821081141561403b5761403a61409f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20554e5354414b455f414d4f554e545f45584345454445440000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a205a45524f5f554e5354414b455f414d4f554e54000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f45524332303a20424c4f434b5f54696d655f4e4f545f53455400000000000000600082015250565b7f43524544413a204d494e545f43414c4c45525f4e4f545f415554484f52495a4560008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f45524332303a20544f54414c5f535550504c595f455843454544454400000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20464143544f525f4e4f545f5345540000000000000000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61463381613f87565b811461463e57600080fd5b50565b61464a81613f99565b811461465557600080fd5b50565b61466181613fc5565b811461466c57600080fd5b50565b61467881613fcf565b811461468357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320756e6c6f636b65642062616c616e6365a264697066735822122055bc996677febed5fc70424b920b0db3303db3fc900e3ae6ef8e6fd2679ade8664736f6c63430008040033