0x608060405234801561000f575f5ffd5b505f60405161001d90610107565b604051809103905ff080158015610036573d5f5f3e3d5ffd5b50604051633201399760e01b815273d1fac4f51457e4a6d35bdc7311718e5d6de92bb9600482015273833589fcd6edb6e08f4c7c32d4f71b54bda029136024820152731ff5e9947f7005302e844a6c0099349674b5957660448201526204956f19606482015262042cbf1960848201526a01112b0a45a713d240000060a48201525f60c48201529091506001600160a01b0382169063320139979060e4015f604051808303815f87803b1580156100eb575f5ffd5b505af11580156100fd573d5f5f3e3d5ffd5b5050505050610114565b6125b48061015e83390190565b603e806101205f395ff3fe60806040525f5ffdfea264697066735822122053970ae2b759a8bcb5f59b8221cdc441e418d8d9f7cd9b328649e070ef88192264736f6c634300081c00336080604052600180546001600160a01b031990811673bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb1790915560038054821673d79ef386f26e40b5e60e4aeb324f2678f6ebbf49179055600480549091167351b8f730f8bf77236e6040cc503a560b3c52e12c1790553480156074575f5ffd5b50612532806100825f395ff3fe608060405260043610610041575f3560e01c806310d1e85c1461004c57806331f570721461006d578063320139971461008c578063fa461e33146100ab575f5ffd5b3661004857005b5f5ffd5b348015610057575f5ffd5b5061006b610066366004611f45565b6100ca565b005b348015610078575f5ffd5b5061006b610087366004611fa4565b6106b3565b348015610097575f5ffd5b5061006b6100a6366004612003565b610921565b3480156100b6575f5ffd5b5061006b6100c536600461208b565b610a76565b6100d2610c28565b5f818060200190518101906100e79190612107565b5050925050505f815f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610133573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015791906121b0565b5f546001600160a01b039081169116146101f057836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101cb91906121b0565b5f6101eb600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b610261565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561022c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025091906121b0565b60016102616401000276a38261220b565b9250925092505f60035f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b81526004016020604051808303815f875af11580156102b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102dd91906121b0565b90506102e887610cc0565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561032c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610350919061222a565b90505f6127106103628c612721612241565b61036c919061226c565b90505f81831061037e57506001610492565b506040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156103c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e9919061222a565b6103f3908461227f565b604080516001600160a01b038c1660208083018290528351808403909101815291830190925291925063128acb08308a61042c86612292565b8b866040518663ffffffff1660e01b815260040161044e9594939291906122ef565b60408051808303815f875af1158015610469573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048d9190612334565b505050505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0385169063a9059cbb906044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b5050505080801561055f57506040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610539573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055d919061222a565b115b156106a457604080516001600160a01b038a1660208201525f91016040516020818303038152906040529050866105a5576105a06401000276a3600161220b565b6105c4565b6105c4600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b6040516370a0823160e01b815230600482018190529197506001600160a01b03808c169263128acb089290918b1591908d16906370a0823190602401602060405180830381865afa15801561061b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f919061222a565b8a866040518663ffffffff1660e01b81526004016106619594939291906122ef565b60408051808303815f875af115801561067c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a09190612334565b5050505b50505050505050505050505050565b6106bb610c28565b5f5f828060200190518101906106d19190612107565b945050935050505f825f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074291906121b0565b5f546001600160a01b039081169116146107db57836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610792573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107b691906121b0565b5f6107d6600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b61084c565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610817573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083b91906121b0565b600161084c6401000276a38261220b565b60035460405163022c0d9f60e01b815293965091945092506001600160a01b03169063022c0d9f906108889088905f9030908d90600401612356565b5f604051808303815f87803b15801561089f575f5ffd5b505af11580156108b1573d5f5f3e3d5ffd5b50505f5460015460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116925063095ea7b391506044015f604051808303815f87803b158015610901575f5ffd5b505af1158015610913573d5f5f3e3d5ffd5b505050505050505050505050565b610929610c28565b5f80546001600160a01b0319166001600160a01b038881169182178355604080516060810182528983168152600289810b602083015288900b818301526001805492516370a0823160e01b81529290931660048301529392906370a0823190602401602060405180830381865afa1580156109a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ca919061222a565b6109d4919061227f565b90505f89898486886040516020016109f095949392919061238c565b60408051601f198184030181529082905260015463701195a160e11b83529092506001600160a01b03169063e0232b4290610a33908c90869086906004016123e9565b5f604051808303815f87803b158015610a4a575f5ffd5b505af1158015610a5c573d5f5f3e3d5ffd5b50505050610a6a89896115c3565b50505050505050505050565b610a7e610c28565b5f610a8b82840184612418565b90505f851315610b5957806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af591906121b0565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201889052919091169063a9059cbb906044015f604051808303815f87803b158015610b3e575f5ffd5b505af1158015610b50573d5f5f3e3d5ffd5b50505050610c21565b5f841315610c2157806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc191906121b0565b60405163a9059cbb60e01b81526001600160a01b03838116600483015260248201879052919091169063a9059cbb906044015f604051808303815f87803b158015610c0a575f5ffd5b505af1158015610c1c573d5f5f3e3d5ffd5b505050505b5050505050565b6040516bffffffffffffffffffffffff193260601b166020820152603401604051602081830303815290604052805190602001207fe0444f9cc38807816e33c5cc67f2cd94c98530099448cbbb341bd55438f930835f1b14610cbe5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9027bbb732b960b11b60448201526064015b60405180910390fd5b565b5f5f5f5f5f85806020019051810190610cd99190612107565b945094509450945094505f835f015190505f5f5f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4d91906121b0565b6001600160a01b0316886001600160a01b031614610dea57836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc591906121b0565b5f610de5600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b610e5b565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4a91906121b0565b6001610e5b6401000276a38261220b565b9250925092508515610f9157604080516001600160a01b03861660208201525f9101604051602081830303815290604052905082610ea557610ea08860400151611a4b565b610eb2565b610eb28860200151611a4b565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb089290918791908e16906370a0823190602401602060405180830381865afa158015610f08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2c919061222a565b86866040518663ffffffff1660e01b8152600401610f4e9594939291906122ef565b60408051808303815f875af1158015610f69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d9190612334565b5050505b5f6040518060e00160405280898152602001866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdf573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100391906121b0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611047573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106b919061222a565b8152602001866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d091906121b0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611114573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061222a565b81525f6020820181905260408083018290524260608401523060809093019290925254905163095ea7b360e01b81526001600160a01b038d811660048301525f19602483015292935091169063095ea7b3906044015f604051808303815f87803b1580156111a4575f5ffd5b505af11580156111b6573d5f5f3e3d5ffd5b505060405163095ea7b360e01b81526001600160a01b038d811660048301525f1960248301528716925063095ea7b391506044015f604051808303815f87803b158015611201575f5ffd5b505af1158015611213573d5f5f3e3d5ffd5b50506040805163b3165aaf60e01b8152845180516001600160a01b039081166004840152602080830151600290810b60248601529285015190920b6044840152908601516064830152918501516084820152606085015160a4820152608085015160c482015260a085015160e482015260c085015182166101048201525f9350908d16915063b3165aaf90610124016080604051808303815f875af11580156112be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e29190612433565b505060405163227efac360e01b8152919250506001600160a01b038c169063227efac390611314908c90600401612483565b5f604051808303815f87803b15801561132b575f5ffd5b505af115801561133d573d5f5f3e3d5ffd5b50506040805160c0810182528c81523060208083019182528284018781525f60608501818152608086019182524260a08701908152875163d59bd26360e01b8152875180516001600160a01b03908116600484015296810151600290810b602484015299015190980b604489015294518416606488015291516084870152905160a48601525160c4850152905160e48401529093508e16915063d59bd26390610104015f604051808303815f87803b1580156113f7575f5ffd5b505af1158015611409573d5f5f3e3d5ffd5b5050505050505085801561148257506040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561145c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611480919061222a565b115b15610a6a57604080516001600160a01b03861660208201525f91016040516020818303038152906040529050826114c8576114c36401000276a3600161220b565b6114e7565b6114e7600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b6040516370a0823160e01b815230600482018190529193506001600160a01b038088169263128acb08929091871591908916906370a0823190602401602060405180830381865afa15801561153e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611562919061222a565b86866040518663ffffffff1660e01b81526004016115849594939291906122ef565b60408051808303815f875af115801561159f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a49190612334565b5f5f836001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561160b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162f91906121b0565b6001600160a01b0316146116a357826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611679573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169d91906121b0565b5f611706565b826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170391906121b0565b60015b604080516001600160a01b03871660208201529294509092505f910160408051601f19818403018152908290526370a0823160e01b825230600483015291505f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015611778573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061179c919061222a565b11156118ba57826117bc576117b76401000276a3600161220b565b6117db565b6117db600173fffd8963efd1fc6a506488495d951d5263988d266121e6565b6040516370a0823160e01b815230600482018190529192506001600160a01b038088169263128acb08929091871591908916906370a0823190602401602060405180830381865afa158015611832573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611856919061222a565b85876040518663ffffffff1660e01b81526004016118789594939291906122ef565b60408051808303815f875af1158015611893573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b79190612334565b50505b6040516370a0823160e01b81523060048201526001600160a01b0385169063a9059cbb90329083906370a0823190602401602060405180830381865afa158015611906573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192a919061222a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561196d575f5ffd5b505af115801561197f573d5f5f3e3d5ffd5b50505f546040516370a0823160e01b81523060048201526001600160a01b03909116925063a9059cbb9150329083906370a0823190602401602060405180830381865afa1580156119d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f6919061222a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611a39575f5ffd5b505af1158015610a6a573d5f5f3e3d5ffd5b5f5f5f8360020b12611a60578260020b611a6d565b8260020b611a6d90612292565b9050611a7c620d89e7196124b6565b62ffffff16811115611ab45760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610cb5565b5f816001165f03611ac957600160801b611adb565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611b1a576080611b15826ffff97272373d413259a46990580e213a612241565b901c90505b6004821615611b44576080611b3f826ffff2e50f5f656932ef12357cf3c7fdcc612241565b901c90505b6008821615611b6e576080611b69826fffe5caca7e10e4e61c3624eaa0941cd0612241565b901c90505b6010821615611b98576080611b93826fffcb9843d60f6159c9db58835c926644612241565b901c90505b6020821615611bc2576080611bbd826fff973b41fa98c081472e6896dfb254c0612241565b901c90505b6040821615611bec576080611be7826fff2ea16466c96a3843ec78b326b52861612241565b901c90505b6080821615611c16576080611c11826ffe5dee046a99a2a811c461f1969c3053612241565b901c90505b610100821615611c41576080611c3c826ffcbe86c7900a88aedcffc83b479aa3a4612241565b901c90505b610200821615611c6c576080611c67826ff987a7253ac413176f2b074cf7815e54612241565b901c90505b610400821615611c97576080611c92826ff3392b0822b70005940c7a398e4b70f3612241565b901c90505b610800821615611cc2576080611cbd826fe7159475a2c29b7443b29c7fa6e889d9612241565b901c90505b611000821615611ced576080611ce8826fd097f3bdfd2022b8845ad8f792aa5825612241565b901c90505b612000821615611d18576080611d13826fa9f746462d870fdf8a65dc1f90e061e5612241565b901c90505b614000821615611d43576080611d3e826f70d869a156d2a1b890bb3df62baf32f7612241565b901c90505b618000821615611d6e576080611d69826f31be135f97d08fd981231505542fcfa6612241565b901c90505b62010000821615611d9a576080611d95826f09aa508b5b7a84e1c677de54f3e99bc9612241565b901c90505b62020000821615611dc5576080611dc0826e5d6af8dedb81196699c329225ee604612241565b901c90505b62040000821615611def576080611dea826d2216e584f5fa1ea926041bedfe98612241565b901c90505b62080000821615611e17576080611e12826b048a170391f7dc42444e8fa2612241565b901c90505b5f8460020b1315611e3057611e2d815f1961226c565b90505b611e3f640100000000826124d6565b15611e4b576001611e4d565b5f5b611e5e9060ff16602083901c6124e9565b949350505050565b6001600160a01b0381168114611e7a575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715611eb457611eb4611e7d565b60405290565b5f82601f830112611ec9575f5ffd5b813567ffffffffffffffff811115611ee357611ee3611e7d565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611f1257611f12611e7d565b604052818152838201602001851015611f29575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f60808587031215611f58575f5ffd5b8435611f6381611e66565b93506020850135925060408501359150606085013567ffffffffffffffff811115611f8c575f5ffd5b611f9887828801611eba565b91505092959194509250565b5f5f60408385031215611fb5575f5ffd5b82359150602083013567ffffffffffffffff811115611fd2575f5ffd5b611fde85828601611eba565b9150509250929050565b8060020b8114611e7a575f5ffd5b8015158114611e7a575f5ffd5b5f5f5f5f5f5f5f60e0888a031215612019575f5ffd5b873561202481611e66565b9650602088013561203481611e66565b9550604088013561204481611e66565b9450606088013561205481611fe8565b9350608088013561206481611fe8565b925060a0880135915060c088013561207b81611ff6565b8091505092959891949750929550565b5f5f5f5f6060858703121561209e575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156120c2575f5ffd5b8501601f810187136120d2575f5ffd5b803567ffffffffffffffff8111156120e8575f5ffd5b8760208284010111156120f9575f5ffd5b949793965060200194505050565b5f5f5f5f5f85870360e081121561211c575f5ffd5b865161212781611e66565b602088015190965061213881611e66565b94506060603f198201121561214b575f5ffd5b50612154611e91565b604087015161216281611e66565b8152606087015161217281611fe8565b6020820152608087015161218581611fe8565b604082015260a087015190935061219b81611ff6565b60c09690960151949793965091949392915050565b5f602082840312156121c0575f5ffd5b81516121cb81611e66565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b038281168282160390811115612205576122056121d2565b92915050565b6001600160a01b038181168382160190811115612205576122056121d2565b5f6020828403121561223a575f5ffd5b5051919050565b8082028115828204841417612205576122056121d2565b634e487b7160e01b5f52601260045260245ffd5b5f8261227a5761227a612258565b500490565b81810381811115612205576122056121d2565b5f600160ff1b82016122a6576122a66121d2565b505f0390565b5f81518084525f5b818110156122d0576020818501810151868301820152016122b4565b505f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f90612329908301846122ac565b979650505050505050565b5f5f60408385031215612345575f5ffd5b505080516020909101519092909150565b84815283602082015260018060a01b0383166040820152608060608201525f61238260808301846122ac565b9695505050505050565b6001600160a01b0386811682528516602082015260e081016123d6604083018660018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b92151560a082015260c001529392505050565b60018060a01b0384168152826020820152606060408201525f61240f60608301846122ac565b95945050505050565b5f60208284031215612428575f5ffd5b81356121cb81611e66565b5f5f5f5f60808587031215612446575f5ffd5b845160208601519094506fffffffffffffffffffffffffffffffff8116811461246d575f5ffd5b6040860151606090960151949790965092505050565b60608101612205828460018060a01b038151168252602081015160020b6020830152604081015160020b60408301525050565b5f8160020b627fffff1981036124ce576124ce6121d2565b5f0392915050565b5f826124e4576124e4612258565b500690565b80820180821115612205576122056121d256fea2646970667358221220ba8c30050d4086641589f49a28b056edbeebd3858507d9476af1575e52230af864736f6c634300081c0033