0x60a060405234801562000010575f80fd5b50604051620040a5380380620040a58339810160408190526200003391620000ce565b336080525f5b8151811015620000965760015f808484815181106200005c576200005c6200019b565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010162000039565b5050620001af565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620000c9575f80fd5b919050565b5f6020808385031215620000e0575f80fd5b82516001600160401b0380821115620000f7575f80fd5b818501915085601f8301126200010b575f80fd5b8151818111156200012057620001206200009e565b8060051b604051601f19603f830116810181811085821117156200014857620001486200009e565b60405291825284820192508381018501918883111562000166575f80fd5b938501935b828510156200018f576200017f85620000b2565b845293850193928501926200016b565b98975050505050505050565b634e487b7160e01b5f52603260045260245ffd5b608051613eb3620001f25f395f8181610205015281816102ff01528181610426015281816104cb0152818161058801528181610853015261096a0152613eb35ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638da5cb5b116100b4578063dd7d695311610079578063dd7d6953146102a9578063e28a83fa146102bc578063f04785ac146102c5578063fa461e3314610166578063fa64e033146102d8578063fc1b8e09146102eb575f80fd5b80638da5cb5b146102005780639a3073911461023f578063afa22d1f14610261578063b3f7619c14610274578063ba7a520114610287575f80fd5b8063487553ed116100fa578063487553ed146101ab5780637ef54061146101b4578063801d356f146101c7578063816ffac5146101da57806383f0fcdc146101ed575f80fd5b806314606b541461013657806315931d191461015157806323a69e75146101665780632c8958f61461016657806346ea83e614610179575b5f80fd5b61013e600381565b6040519081526020015b60405180910390f35b61016461015f366004613798565b6102f4565b005b6101646101743660046137eb565b610411565b61019b610187366004613878565b60066020525f908152604090205460ff1681565b6040519015158152602001610148565b61013e60025481565b6101646101c2366004613893565b61041b565b6101646101d53660046138d1565b6104c0565b6101646101e83660046138fb565b61057d565b61013e6101fb366004613932565b610621565b6102277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610148565b61019b61024d366004613878565b5f6020819052908152604090205460ff1681565b600554610227906001600160a01b031681565b61016461028236600461397f565b610779565b61019b610295366004613878565b60076020525f908152604090205460ff1681565b600454610227906001600160a01b031681565b61013e60015481565b6101646102d3366004613798565b610848565b6101646102e63660046139a8565b61095f565b61013e60035481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461033c576040516282b42960e81b815260040160405180910390fd5b5f5b8281101561040b578160065f86868581811061035c5761035c6139d4565b90506020020160208101906103719190613878565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106103aa576103aa6139d4565b90506020020160208101906103bf9190613878565b6001600160a01b03167f50c3f33f9f3675abaf9c9ada3d4db0f130aec69953ffe3693e7d5757adfde084836040516103fb911515815260200190565b60405180910390a260010161033e565b50505050565b61040b8484610a2c565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610463576040516282b42960e81b815260040160405180910390fd5b61046e838383610b02565b816001600160a01b0316836001600160a01b03167f9a2c8b73e988b3ce59379f87d246147c3e6306eca8958b49a646b6f550ae3b83836040516104b391815260200190565b60405180910390a3505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610508576040516282b42960e81b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610551576040519150601f19603f3d011682016040523d82523d5f602084013e610556565b606091505b505090508061057857604051631a0b100f60e21b815260040160405180910390fd5b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105c5576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527f66646d1a87ee5a43c85321f7fd2a5dcbc7aef2768a2ef8fd7689f290786e6002910160405180910390a25050565b335f9081526020819052604081205460ff1661064f576040516282b42960e81b815260040160405180910390fd5b60085460010361067257604051631542a98960e11b815260040160405180910390fd5b60016008554282101561069857604051630407b05b60e31b815260040160405180910390fd5b5f805f806106a68989610bee565b93509350935093506106da89895f8181106106c3576106c36139d4565b90506020028101906106d591906139e8565b611110565b6106e6898989856112ee565b6106f38989868685611428565b9450868510156107165760405163017cea0960e31b815260040160405180910390fd5b604080518281526020810187905260ff8a168183015290516001600160a01b0385811692908716917f7402ea9438b945f2a0fe65af9ccd0bf8345ad7c51e76e23f0c9a836c2b2cd6fd9181900360600190a350505f600855509095945050505050565b335f9081526020819052604090205460ff166107a7576040516282b42960e81b815260040160405180910390fd5b6004546001600160a01b03166107d05760405163a1a4353360e01b815260040160405180910390fd5b620f424081106107f35760405163c4c321d160e01b815260040160405180910390fd5b60018390556002829055600381905560408051848152602081018490529081018290527f86e06db3b453643a9cf448c4d1e6ca05f379b529bd44f9cccb348baa0350e5e49060600160405180910390a1505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610890576040516282b42960e81b815260040160405180910390fd5b5f5b8281101561040b578160075f8686858181106108b0576108b06139d4565b90506020020160208101906108c59190613878565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106108fe576108fe6139d4565b90506020020160208101906109139190613878565b6001600160a01b03167f32548af400164f091953a529f4c3e16986cc44c62b1a599957b6a86840ec07388360405161094f911515815260200190565b60405180910390a2600101610892565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109a7576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03821615806109c457506001600160a01b038116155b806109e05750806001600160a01b0316826001600160a01b0316145b156109fe5760405163c4c321d160e01b815260040160405180910390fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6009546001600160a01b0316801580610a4e5750336001600160a01b03821614155b15610a6b576040516282b42960e81b815260040160405180910390fd5b600a8054600b8054600980546001600160a01b031990811690915583169093555f908190556001600160a01b039091169190808613610aaa5784610aac565b855b90505f8113610ace5760405163939c7a7760e01b815260040160405180910390fd5b81811115610aef57604051635fb6774960e01b815260040160405180910390fd5b610afa838583610b02565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691610b5d9190613a28565b5f604051808303815f865af19150503d805f8114610b96576040519150601f19603f3d011682016040523d82523d5f602084013e610b9b565b606091505b5091509150811580610bc95750805115801590610bc9575080806020019051810190610bc79190613a39565b155b15610be7576040516312171d8360e31b815260040160405180910390fd5b5050505050565b5f80808084801580610c005750600881115b15610c1e5760405163c4c321d160e01b815260040160405180910390fd5b86865f818110610c3057610c306139d4565b9050602002810190610c4291906139e8565b610c4c9080613a54565b90505f03610c6d5760405163c4c321d160e01b815260040160405180910390fd5b86865f818110610c7f57610c7f6139d4565b9050602002810190610c9191906139e8565b610c9b9080613a54565b5f818110610cab57610cab6139d4565b905061010002016020016020810190610cc49190613878565b945086865f818110610cd857610cd86139d4565b9050602002810190610cea91906139e8565b610cf49080613a54565b600189895f818110610d0857610d086139d4565b9050602002810190610d1a91906139e8565b610d249080613a54565b610d2f929150613aae565b818110610d3e57610d3e6139d4565b905061010002016040016020810190610d579190613878565b93506001600160a01b0385161580610d805750836001600160a01b0316856001600160a01b0316145b15610d9e5760405163c4c321d160e01b815260040160405180910390fd5b5f5b818110156110bb57365f898984818110610dbc57610dbc6139d4565b9050602002810190610dce91906139e8565b610dd89080613a54565b909250905080801580610deb5750600681115b15610e095760405163c4c321d160e01b815260040160405180910390fd5b8a8a85818110610e1b57610e1b6139d4565b9050602002810190610e2d91906139e8565b602001351580610e6a57506001600160701b038b8b86818110610e5257610e526139d4565b9050602002810190610e6491906139e8565b60200135115b15610e885760405163c4c321d160e01b815260040160405180910390fd5b886001600160a01b031683835f818110610ea457610ea46139d4565b905061010002016020016020810190610ebd9190613878565b6001600160a01b031614610ee45760405163c4c321d160e01b815260040160405180910390fd5b6001600160a01b0388168383610efb600185613aae565b818110610f0a57610f0a6139d4565b905061010002016040016020810190610f239190613878565b6001600160a01b031614610f4a5760405163c4c321d160e01b815260040160405180910390fd5b5f5b8181101561107c5760065f858584818110610f6957610f696139d4565b610f80926020610100909202019081019150613878565b6001600160a01b0316815260208101919091526040015f205460ff16610fb957604051631eb49d6d60e11b815260040160405180910390fd5b60075f858584818110610fce57610fce6139d4565b905061010002016020016020810190610fe79190613878565b6001600160a01b0316815260208101919091526040015f205460ff161580611056575060075f85858481811061101f5761101f6139d4565b9050610100020160400160208101906110389190613878565b6001600160a01b0316815260208101919091526040015f205460ff16155b1561107457604051631eb49d6d60e11b815260040160405180910390fd5b600101610f4c565b50958601958a8a85818110611093576110936139d4565b90506020028101906110a591906139e8565b6020013586019550836001019350505050610da0565b5060108311156110de5760405163c4c321d160e01b815260040160405180910390fd5b6001600160701b038211156111065760405163c4c321d160e01b815260040160405180910390fd5b5092959194509250565b3661111b8280613a54565b5f81811061112b5761112b6139d4565b610100029190910191506003905061114960a0830160808401613ac1565b60ff16111561116b5760405163c4c321d160e01b815260040160405180910390fd5b80606001355f0361118f576040516320bd63bd60e11b815260040160405180910390fd5b5f6111a060a0830160808401613ac1565b60ff160361128c575f806111bf6111ba6020850185613878565b61162f565b91509150815f14806111cf575080155b806111e057506001600160701b0382115b806111f157506001600160701b0381115b1561120f5760405163b22decbd60e01b815260040160405180910390fd5b606083013561126d602086013561122c60e0870160c08801613ae1565b6112365783611238565b845b61124860e0880160c08901613ae1565b6112525785611254565b845b61126460c0890160a08a01613b0b565b61ffff166116ab565b101561040b5760405163b2d3a00360e01b815260040160405180910390fd5b6112a461129f60a0830160808401613ac1565b61171c565b6112ea575f806112b8838560200135611738565b915091508180156112cc5750826060013581105b1561040b5760405163b2d3a00360e01b815260040160405180910390fd5b5050565b5f8167ffffffffffffffff81111561130857611308613b26565b60405190808252806020026020018201604052801561136357816020015b61135060405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b8152602001906001900390816113265790505b5090505f8267ffffffffffffffff81111561138057611380613b26565b6040519080825280602002602001820160405280156113a9578160200160208202803683370190505b5090506113b4613729565b5f86815b818110156113fb576113ef8a8a838181106113d5576113d56139d4565b90506020028101906113e791906139e8565b878787611aa3565b909201916001016113b8565b508682101561141d5760405163017cea0960e31b815260040160405180910390fd5b505050505050505050565b5f611431613729565b6001541561151657600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a49190613b3a565b81526005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115109190613b3a565b60208201525b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa15801561155a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157e9190613b3a565b905061158a8888611ddc565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156115ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f29190613b3a565b9050818111611601575f61160b565b61160b8282613aae565b93506001545f14611623576116238787878787611e72565b50505095945050505050565b5f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561166f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116939190613b7f565b506001600160701b0391821697911695509350505050565b5f8415806116b7575083155b806116c0575082155b156116cc57505f611714565b5f6116d983612710613aae565b6116e39087613bbf565b9050806116f286612710613bbf565b6116fc9190613bd6565b6117068583613bbf565b6117109190613bfd565b9150505b949350505050565b5f60ff821660021480611732575060ff82166003145b92915050565b5f8080806117496020870187613878565b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611784573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a89190613c10565b50949650929450506001600160a01b03851692505050600282900b5f6117d160208a018a613878565b6001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118309190613ca9565b6001600160801b03169050821580611846575080155b1561185b575f80965096505050505050611a9c565b5f61186c60c08b0160a08c01613b0b565b61187b9061ffff166064613bbf565b90505f61188e60c08c0160a08d01613b0b565b61189d9061ffff166002613ccf565b90505f811315806118b15750620f42408210155b156118c8575f809850985050505050505050611a9c565b5f620f42406118d78482613aae565b6118e1908d613bbf565b6118eb9190613bfd565b9050805f03611907575f80995099505050505050505050611a9c565b5f61191860e08e0160c08f01613ae1565b156119fe57606085901b5f61192d8985613bbf565b90508861193a8583613bfd565b14611955575f809c509c505050505050505050505050611a9c565b5f6119608284613bd6565b905082811015611981575f809d509d50505050505050505050505050611a9c565b61198c838b83611f8f565b93508984106119ac575f809d509d50505050505050505050505050611a9c565b6119be6119b98a88611fe1565b61201f565b8410156119dc575f809d509d50505050505050505050505050611a9c565b6119f4886119ea868d613aae565b600160601b61232e565b9c50505050611a8d565b611a0d82600160601b8761232e565b611a179088613bd6565b9050868111611a34575f809a509a50505050505050505050611a9c565b611a4c83611a428886611fe1565b6119b99190613cfe565b811115611a67575f809a509a50505050505050505050611a9c565b86611a80606087901b611a7a8385613aae565b8461232e565b611a8a9190613bfd565b99505b5f8a119a505050505050505050505b9250929050565b5f3681611ab08780613a54565b602089013594509092509050805f5b81811015611dd05736848483818110611ada57611ada6139d4565b6101000291909101915060039050611af860a0830160808401613ac1565b60ff161115611b1a5760405163c4c321d160e01b815260040160405180910390fd5b80606001355f03611b3e576040516320bd63bd60e11b815260040160405180910390fd5b82611b4a836001613bd6565b108015611bac5750611b626060820160408301613878565b6001600160a01b03168585611b78856001613bd6565b818110611b8757611b876139d4565b905061010002016020016020810190611ba09190613878565b6001600160a01b031614155b15611bca5760405163c4c321d160e01b815260040160405180910390fd5b5f5b82811015611c7b575f868683818110611be757611be76139d4565b905061010002016080016020810190611c009190613ac1565b60ff16148015611c555750611c186020830183613878565b6001600160a01b0316868683818110611c3357611c336139d4565b611c4a926020610100909202019081019150613878565b6001600160a01b0316145b15611c735760405163c4c321d160e01b815260040160405180910390fd5b600101611bcc565b505f611c8d60a0830160808401613ac1565b60ff1603611ca857611ca181878b8a6123e9565b9550611da7565b611cbb61129f60a0830160808401613ac1565b15611ccc5780606001359550611da7565b5f5b6020880151811015611d3957611ce76020830183613878565b6001600160a01b0316898281518110611d0257611d026139d4565b60200260200101516001600160a01b031603611d315760405163c4c321d160e01b815260040160405180910390fd5b600101611cce565b50611d476020820182613878565b88886001602002015181518110611d6057611d606139d4565b6001600160a01b03929092166020928302919091018201528701805160010190525f80611d8d8389611738565b9150915081611da0578260600135611da2565b805b975050505b855f03611dc75760405163c4c321d160e01b815260040160405180910390fd5b50600101611abf565b50505050949350505050565b805f5b8181101561040b57365f858584818110611dfb57611dfb6139d4565b9050602002810190611e0d91906139e8565b611e179080613a54565b915091505f611e4e8383898988818110611e3357611e336139d4565b9050602002810190611e4591906139e8565b602001356126fd565b90506001821115611e6457611e648383836129a7565b836001019350505050611ddf565b6004546001600160a01b038681169116148015611e9c57506005546001600160a01b038581169116145b15611ef8575f611ec082826020020151836001602002015160015460025488612c5c565b905080831015611ef25760405163c586146960e01b815260048101849052602481018290526044015b60405180910390fd5b50610be7565b6005546001600160a01b038681169116148015611f2257506004546001600160a01b038581169116145b15611f76575f611f4982826020020151836001602002015160015460025487600354612cee565b905080841115611ef2576040516319e76b0d60e11b81526004810185905260248101829052604401611ee9565b60405163a1a4353360e01b815260040160405180910390fd5b5f611f9b84848461232e565b90505f8280611fac57611fac613be9565b8486091115611fda575f198103611fd657604051631a93c68960e11b815260040160405180910390fd5b6001015b9392505050565b5f81611fed8185613d25565b611ff79190613ccf565b90505f83128015612010575061200d8284613d51565b15155b1561173257611fda8282613d64565b5f805f831261202e5782612032565b825f035b9050620d89e88111156120585760405163c4c321d160e01b815260040160405180910390fd5b5f816001165f0361206d57600160801b61207f565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156120b3576ffff97272373d413259a46990580e213a0260801c5b60048216156120d2576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156120f1576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612110576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561212f576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561214e576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561216d576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561218d576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156121ad576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156121cd576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156121ed576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561220d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561222d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561224d576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561226d576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561228e576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156122ae576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156122cd576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156122ea576b048a170391f7dc42444e8fa20260801c5b5f84131561230657805f198161230257612302613be9565b0490505b64010000000081061561231a57600161231c565b5f5b60ff16602082901c0192505050919050565b5f838302815f1985870982811083820303915050805f036123625783828161235857612358613be9565b0492505050611fda565b80841161238257604051631a93c68960e11b815260040160405180910390fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f19815b8351811015612448576124046020880188613878565b6001600160a01b031685828151811061241f5761241f6139d4565b60200260200101515f01516001600160a01b03160361244057809150612448565b6001016123ee565b505f198103612510575f806124636111ba60208a018a613878565b91509150815f1480612473575080155b8061248457506001600160701b0382115b8061249557506001600160701b0381115b156124b35760405163b22decbd60e01b815260040160405180910390fd5b84516040805160608101909152909350806124d160208b018b613878565b6001600160a01b03168152602001838152602001828152508684815181106124fb576124fb6139d4565b60209081029190910101525050825160010183525b5f848281518110612523576125236139d4565b60200260200101516020015190505f858381518110612544576125446139d4565b6020026020010151604001519050815f148061255e575080155b1561257c5760405163b22decbd60e01b815260040160405180910390fd5b6125c88761259060e08b0160c08c01613ae1565b61259a578261259c565b835b6125ac60e08c0160c08d01613ae1565b6125b657846125b8565b835b61126460c08d0160a08e01613b0b565b9350835f036125ea5760405163c4c321d160e01b815260040160405180910390fd5b6125fa60e0890160c08a01613ae1565b1561267a5780841061261f5760405163b22decbd60e01b815260040160405180910390fd5b6126298783613bd6565b86848151811061263b5761263b6139d4565b60209081029190910181015101526126538482613aae565b868481518110612665576126656139d4565b602002602001015160400181815250506126f2565b81841061269a5760405163b22decbd60e01b815260040160405180910390fd5b6126a48782613bd6565b8684815181106126b6576126b66139d4565b6020908102919091010151604001526126cf8483613aae565b8684815181106126e1576126e16139d4565b602002602001015160200181815250505b505050949350505050565b5f3684845f818110612711576127116139d4565b6101000291909101915050600184145f818061275b57505f8787600181811061273c5761273c6139d4565b9050610100020160800160208101906127559190613ac1565b60ff1614155b80612774575061277461129f60a0850160808601613ac1565b90505f816127ab578787600181811061278f5761278f6139d4565b6127a6926020610100909202019081019150613878565b6127ad565b305b90505f8215612831576127c66060860160408701613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561280a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282e9190613b3a565b90505b5f61284260a0870160808801613ac1565b60ff160361287f5761287061285d6040870160208801613878565b61286a6020880188613878565b89610b02565b61287a8583612d29565b6128d2565b600161289160a0870160808801613ac1565b60ff16036128a45761287a858389613034565b60026128b660a0870160808801613ac1565b60ff16036128c85761287a8588613266565b6128d285886134ef565b8215612997575f6128e96060870160408801613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561292d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129519190613b3a565b9050818111612960575f61296a565b61296a8282613aae565b965085606001358710156129915760405163b2d3a00360e01b815260040160405180910390fd5b5061299b565b5f95505b50505050509392505050565b8160015b81811015610be757368585838181106129c6576129c66139d4565b9050610100020190505f838360016129de9190613bd6565b1490505f8180612a2557505f88886129f7876001613bd6565b818110612a0657612a066139d4565b905061010002016080016020810190612a1f9190613ac1565b60ff1614155b80612a3e5750612a3e61129f60a0850160808601613ac1565b90505f81612a7e578888612a53876001613bd6565b818110612a6257612a626139d4565b612a79926020610100909202019081019150613878565b612a80565b305b90505f8215612b0457612a996060860160408701613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612add573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b019190613b3a565b90505b5f612b1560a0870160808801613ac1565b60ff1603612b58578715612b4957612b49612b366040870160208801613878565b612b436020880188613878565b8a610b02565b612b538583612d29565b612b83565b875f03612b785760405163c4c321d160e01b815260040160405180910390fd5b612b8385838a613034565b8215612c48575f612b9a6060870160408801613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612bde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c029190613b3a565b9050818111612c11575f612c1b565b612c1b8282613aae565b98508560600135891015612c425760405163b2d3a00360e01b815260040160405180910390fd5b50612c4c565b5f97505b85600101955050505050506129ab565b5f80612c688588613bd6565b9050808310612c8a5760405163af6ddbcd60e01b815260040160405180910390fd5b5f612c958588613bd6565b90505f612ca28284613bbf565b90505f612caf8685613aae565b90505f816001612cbf8286613bd6565b612cc99190613aae565b612cd39190613bfd565b9050612cdf8482613aae565b9b9a5050505050505050505050565b5f620f4240612cfd8382613aae565b612d0a898989898961366b565b612d149190613bbf565b612d1e9190613bfd565b979650505050505050565b5f80612d3b6111ba6020860186613878565b90925090506001600160701b03821180612d5b57506001600160701b0381115b15612d795760405163b22decbd60e01b815260040160405180910390fd5b5f612d8a60e0860160c08701613ae1565b612d945781612d96565b825b90505f612da960e0870160c08801613ae1565b612db35783612db5565b825b90505f612dc86040880160208901613878565b6001600160a01b03166370a08231612de360208a018a613878565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612e25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e499190613b3a565b90505f838211612e59575f612e63565b612e638483613aae565b9050801580612e7857506001600160701b0381115b15612e965760405163c4c321d160e01b815260040160405180910390fd5b5f612ead82868661126460c08e0160a08f01613b0b565b9050805f03612ecf5760405163c4c321d160e01b815260040160405180910390fd5b6001600160a01b0388163014801590612eeb5750886060013581105b15612f095760405163b2d3a00360e01b815260040160405180910390fd5b612f1960e08a0160c08b01613ae1565b15612fa657612f2b60208a018a613878565b60405163022c0d9f60e01b81525f60048201819052602482018490526001600160a01b038b81166044840152608060648401526084830191909152919091169063022c0d9f9060a4015f604051808303815f87803b158015612f8b575f80fd5b505af1158015612f9d573d5f803e3d5ffd5b5050505061141d565b612fb360208a018a613878565b60405163022c0d9f60e01b8152600481018390525f602482018190526001600160a01b038b81166044840152608060648401526084830191909152919091169063022c0d9f9060a4015f604051808303815f87803b158015613013575f80fd5b505af1158015613025573d5f803e3d5ffd5b50505050505050505050505050565b80158061304757506001600160701b0381115b156130655760405163c4c321d160e01b815260040160405180910390fd5b6130726020840184613878565b600980546001600160a01b0319166001600160a01b03929092169190911790556130a26040840160208501613878565b600a80546001600160a01b0319166001600160a01b0392909216919091179055600b8190555f806130d66020860186613878565b6001600160a01b031663128acb08856130f560e0890160c08a01613ae1565b8661310660e08b0160c08c01613ae1565b6131245773fffd8963efd1fc6a506488495d951d5263988d2561312b565b6401000276a45b60405160e086901b6001600160e01b03191681526001600160a01b03948516600482015292151560248401526044830191909152909116606482015260a060848201525f60a482015260c40160408051808303815f875af1158015613192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b69190613d8a565b60095491935091506001600160a01b0316156131e557604051632c377d3360e11b815260040160405180910390fd5b5f6131f660e0870160c08801613ae1565b6132005782613202565b815b90505f81126132245760405163939c7a7760e01b815260040160405180910390fd5b6001600160a01b03851630148015906132485750606086013561324682613dac565b105b15610afa5760405163b2d3a00360e01b815260040160405180910390fd5b805f036132865760405163c4c321d160e01b815260040160405180910390fd5b60e082013560ff811690601e1a8082036132b35760405163c4c321d160e01b815260040160405180910390fd5b6132c36040850160208601613878565b6001600160a01b03166132d96020860186613878565b6001600160a01b031663c6610657846040518263ffffffff1660e01b815260040161330691815260200190565b602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613dc6565b6001600160a01b03161461336c5760405163c4c321d160e01b815260040160405180910390fd5b61337c6060850160408601613878565b6001600160a01b03166133926020860186613878565b6001600160a01b031663c6610657836040518263ffffffff1660e01b81526004016133bf91815260200190565b602060405180830381865afa1580156133da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133fe9190613dc6565b6001600160a01b0316146134255760405163c4c321d160e01b815260040160405180910390fd5b61344b6134386040860160208701613878565b6134456020870187613878565b856136ce565b6134586020850185613878565b604051630b68372160e31b8152600481018490526024810183905260448101859052606086013560648201526001600160a01b039190911690635b41b908906084015f604051808303815f87803b1580156134b1575f80fd5b505af11580156134c3573d5f803e3d5ffd5b5061040b92506134dc9150506040860160208701613878565b6134e96020870187613878565b5f6136ce565b805f0361350f5760405163c4c321d160e01b815260040160405180910390fd5b6135356135226040840160208501613878565b61352f6020850185613878565b836136ce565b6135426020830183613878565b6001600160a01b03166352bbbe296040518060c001604052808560e0013581526020015f60ff1681526020018560200160208101906135819190613878565b6001600160a01b0316815260200161359f6060870160408801613878565b6001600160a01b0316815260208082018690526040805180830182525f8082529382015280516080810182523080825292810184905280820192909252606080830193909352516001600160e01b031960e086901b16815261360a9392880135904290600401613de1565b6020604051808303815f875af1158015613626573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061364a9190613b3a565b506112ea61365e6040840160208501613878565b6134e96020850185613878565b5f806136778588613bd6565b90505f6136848588613bd6565b90505f6136918284613bbf565b90505f61369e8685613bd6565b90505f8160016136ae8286613bd6565b6136b89190613aae565b6136c29190613bfd565b9050612cdf8185613aae565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f92839290871691610b5d9190613a28565b60405180604001604052806002906020820280368337509192915050565b5f8083601f840112613757575f80fd5b50813567ffffffffffffffff81111561376e575f80fd5b6020830191508360208260051b8501011115611a9c575f80fd5b8015158114613795575f80fd5b50565b5f805f604084860312156137aa575f80fd5b833567ffffffffffffffff8111156137c0575f80fd5b6137cc86828701613747565b90945092505060208401356137e081613788565b809150509250925092565b5f805f80606085870312156137fe575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115613823575f80fd5b818701915087601f830112613836575f80fd5b813581811115613844575f80fd5b886020828501011115613855575f80fd5b95989497505060200194505050565b6001600160a01b0381168114613795575f80fd5b5f60208284031215613888575f80fd5b8135611fda81613864565b5f805f606084860312156138a5575f80fd5b83356138b081613864565b925060208401356138c081613864565b929592945050506040919091013590565b5f80604083850312156138e2575f80fd5b82356138ed81613864565b946020939093013593505050565b5f806040838503121561390c575f80fd5b823561391781613864565b9150602083013561392781613788565b809150509250929050565b5f805f8060608587031215613945575f80fd5b843567ffffffffffffffff81111561395b575f80fd5b61396787828801613747565b90989097506020870135966040013595509350505050565b5f805f60608486031215613991575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156139b9575f80fd5b82356139c481613864565b9150602083013561392781613864565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126139fc575f80fd5b9190910192915050565b5f5b83811015613a20578181015183820152602001613a08565b50505f910152565b5f82516139fc818460208701613a06565b5f60208284031215613a49575f80fd5b8151611fda81613788565b5f808335601e19843603018112613a69575f80fd5b83018035915067ffffffffffffffff821115613a83575f80fd5b6020019150600881901b3603821315611a9c575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8181038181111561173257611732613a9a565b5f60208284031215613ad1575f80fd5b813560ff81168114611fda575f80fd5b5f60208284031215613af1575f80fd5b8135611fda81613788565b61ffff81168114613795575f80fd5b5f60208284031215613b1b575f80fd5b8135611fda81613afc565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613b4a575f80fd5b5051919050565b80516001600160701b0381168114613b67575f80fd5b919050565b805163ffffffff81168114613b67575f80fd5b5f805f60608486031215613b91575f80fd5b613b9a84613b51565b9250613ba860208501613b51565b9150613bb660408501613b6c565b90509250925092565b808202811582820484141761173257611732613a9a565b8082018082111561173257611732613a9a565b634e487b7160e01b5f52601260045260245ffd5b5f82613c0b57613c0b613be9565b500490565b5f805f805f805f60e0888a031215613c26575f80fd5b8751613c3181613864565b8097505060208801518060020b8114613c48575f80fd5b6040890151909650613c5981613afc565b6060890151909550613c6a81613afc565b6080890151909450613c7b81613afc565b9250613c8960a08901613b6c565b915060c0880151613c9981613788565b8091505092959891949750929550565b5f60208284031215613cb9575f80fd5b81516001600160801b0381168114611fda575f80fd5b8082025f8212600160ff1b84141615613cea57613cea613a9a565b818105831482151761173257611732613a9a565b8082018281125f831280158216821582161715613d1d57613d1d613a9a565b505092915050565b5f82613d3357613d33613be9565b600160ff1b82145f1984141615613d4c57613d4c613a9a565b500590565b5f82613d5f57613d5f613be9565b500790565b8181035f831280158383131683831282161715613d8357613d83613a9a565b5092915050565b5f8060408385031215613d9b575f80fd5b505080516020909101519092909150565b5f600160ff1b8201613dc057613dc0613a9a565b505f0390565b5f60208284031215613dd6575f80fd5b8151611fda81613864565b60e08152845160e082015260ff6020860151166101008201525f604086015160018060a01b03808216610120850152806060890151166101408501525050608086015161016083015260a086015160c06101808401528051806101a08501526101c0613e538282870160208601613a06565b601f91909101601f19168401019150613ea19050602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c00152929150505600000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dd69cab3e172bc776c08764008ba689f14321563
0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638da5cb5b116100b4578063dd7d695311610079578063dd7d6953146102a9578063e28a83fa146102bc578063f04785ac146102c5578063fa461e3314610166578063fa64e033146102d8578063fc1b8e09146102eb575f80fd5b80638da5cb5b146102005780639a3073911461023f578063afa22d1f14610261578063b3f7619c14610274578063ba7a520114610287575f80fd5b8063487553ed116100fa578063487553ed146101ab5780637ef54061146101b4578063801d356f146101c7578063816ffac5146101da57806383f0fcdc146101ed575f80fd5b806314606b541461013657806315931d191461015157806323a69e75146101665780632c8958f61461016657806346ea83e614610179575b5f80fd5b61013e600381565b6040519081526020015b60405180910390f35b61016461015f366004613798565b6102f4565b005b6101646101743660046137eb565b610411565b61019b610187366004613878565b60066020525f908152604090205460ff1681565b6040519015158152602001610148565b61013e60025481565b6101646101c2366004613893565b61041b565b6101646101d53660046138d1565b6104c0565b6101646101e83660046138fb565b61057d565b61013e6101fb366004613932565b610621565b6102277f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a81565b6040516001600160a01b039091168152602001610148565b61019b61024d366004613878565b5f6020819052908152604090205460ff1681565b600554610227906001600160a01b031681565b61016461028236600461397f565b610779565b61019b610295366004613878565b60076020525f908152604090205460ff1681565b600454610227906001600160a01b031681565b61013e60015481565b6101646102d3366004613798565b610848565b6101646102e63660046139a8565b61095f565b61013e60035481565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a161461033c576040516282b42960e81b815260040160405180910390fd5b5f5b8281101561040b578160065f86868581811061035c5761035c6139d4565b90506020020160208101906103719190613878565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106103aa576103aa6139d4565b90506020020160208101906103bf9190613878565b6001600160a01b03167f50c3f33f9f3675abaf9c9ada3d4db0f130aec69953ffe3693e7d5757adfde084836040516103fb911515815260200190565b60405180910390a260010161033e565b50505050565b61040b8484610a2c565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a1614610463576040516282b42960e81b815260040160405180910390fd5b61046e838383610b02565b816001600160a01b0316836001600160a01b03167f9a2c8b73e988b3ce59379f87d246147c3e6306eca8958b49a646b6f550ae3b83836040516104b391815260200190565b60405180910390a3505050565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a1614610508576040516282b42960e81b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610551576040519150601f19603f3d011682016040523d82523d5f602084013e610556565b606091505b505090508061057857604051631a0b100f60e21b815260040160405180910390fd5b505050565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a16146105c5576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff191685151590811790915591519182527f66646d1a87ee5a43c85321f7fd2a5dcbc7aef2768a2ef8fd7689f290786e6002910160405180910390a25050565b335f9081526020819052604081205460ff1661064f576040516282b42960e81b815260040160405180910390fd5b60085460010361067257604051631542a98960e11b815260040160405180910390fd5b60016008554282101561069857604051630407b05b60e31b815260040160405180910390fd5b5f805f806106a68989610bee565b93509350935093506106da89895f8181106106c3576106c36139d4565b90506020028101906106d591906139e8565b611110565b6106e6898989856112ee565b6106f38989868685611428565b9450868510156107165760405163017cea0960e31b815260040160405180910390fd5b604080518281526020810187905260ff8a168183015290516001600160a01b0385811692908716917f7402ea9438b945f2a0fe65af9ccd0bf8345ad7c51e76e23f0c9a836c2b2cd6fd9181900360600190a350505f600855509095945050505050565b335f9081526020819052604090205460ff166107a7576040516282b42960e81b815260040160405180910390fd5b6004546001600160a01b03166107d05760405163a1a4353360e01b815260040160405180910390fd5b620f424081106107f35760405163c4c321d160e01b815260040160405180910390fd5b60018390556002829055600381905560408051848152602081018490529081018290527f86e06db3b453643a9cf448c4d1e6ca05f379b529bd44f9cccb348baa0350e5e49060600160405180910390a1505050565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a1614610890576040516282b42960e81b815260040160405180910390fd5b5f5b8281101561040b578160075f8686858181106108b0576108b06139d4565b90506020020160208101906108c59190613878565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106108fe576108fe6139d4565b90506020020160208101906109139190613878565b6001600160a01b03167f32548af400164f091953a529f4c3e16986cc44c62b1a599957b6a86840ec07388360405161094f911515815260200190565b60405180910390a2600101610892565b336001600160a01b037f00000000000000000000000072e7ffa8d177c5ff36f2b04a539302a087495e7a16146109a7576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03821615806109c457506001600160a01b038116155b806109e05750806001600160a01b0316826001600160a01b0316145b156109fe5760405163c4c321d160e01b815260040160405180910390fd5b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6009546001600160a01b0316801580610a4e5750336001600160a01b03821614155b15610a6b576040516282b42960e81b815260040160405180910390fd5b600a8054600b8054600980546001600160a01b031990811690915583169093555f908190556001600160a01b039091169190808613610aaa5784610aac565b855b90505f8113610ace5760405163939c7a7760e01b815260040160405180910390fd5b81811115610aef57604051635fb6774960e01b815260040160405180910390fd5b610afa838583610b02565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691610b5d9190613a28565b5f604051808303815f865af19150503d805f8114610b96576040519150601f19603f3d011682016040523d82523d5f602084013e610b9b565b606091505b5091509150811580610bc95750805115801590610bc9575080806020019051810190610bc79190613a39565b155b15610be7576040516312171d8360e31b815260040160405180910390fd5b5050505050565b5f80808084801580610c005750600881115b15610c1e5760405163c4c321d160e01b815260040160405180910390fd5b86865f818110610c3057610c306139d4565b9050602002810190610c4291906139e8565b610c4c9080613a54565b90505f03610c6d5760405163c4c321d160e01b815260040160405180910390fd5b86865f818110610c7f57610c7f6139d4565b9050602002810190610c9191906139e8565b610c9b9080613a54565b5f818110610cab57610cab6139d4565b905061010002016020016020810190610cc49190613878565b945086865f818110610cd857610cd86139d4565b9050602002810190610cea91906139e8565b610cf49080613a54565b600189895f818110610d0857610d086139d4565b9050602002810190610d1a91906139e8565b610d249080613a54565b610d2f929150613aae565b818110610d3e57610d3e6139d4565b905061010002016040016020810190610d579190613878565b93506001600160a01b0385161580610d805750836001600160a01b0316856001600160a01b0316145b15610d9e5760405163c4c321d160e01b815260040160405180910390fd5b5f5b818110156110bb57365f898984818110610dbc57610dbc6139d4565b9050602002810190610dce91906139e8565b610dd89080613a54565b909250905080801580610deb5750600681115b15610e095760405163c4c321d160e01b815260040160405180910390fd5b8a8a85818110610e1b57610e1b6139d4565b9050602002810190610e2d91906139e8565b602001351580610e6a57506001600160701b038b8b86818110610e5257610e526139d4565b9050602002810190610e6491906139e8565b60200135115b15610e885760405163c4c321d160e01b815260040160405180910390fd5b886001600160a01b031683835f818110610ea457610ea46139d4565b905061010002016020016020810190610ebd9190613878565b6001600160a01b031614610ee45760405163c4c321d160e01b815260040160405180910390fd5b6001600160a01b0388168383610efb600185613aae565b818110610f0a57610f0a6139d4565b905061010002016040016020810190610f239190613878565b6001600160a01b031614610f4a5760405163c4c321d160e01b815260040160405180910390fd5b5f5b8181101561107c5760065f858584818110610f6957610f696139d4565b610f80926020610100909202019081019150613878565b6001600160a01b0316815260208101919091526040015f205460ff16610fb957604051631eb49d6d60e11b815260040160405180910390fd5b60075f858584818110610fce57610fce6139d4565b905061010002016020016020810190610fe79190613878565b6001600160a01b0316815260208101919091526040015f205460ff161580611056575060075f85858481811061101f5761101f6139d4565b9050610100020160400160208101906110389190613878565b6001600160a01b0316815260208101919091526040015f205460ff16155b1561107457604051631eb49d6d60e11b815260040160405180910390fd5b600101610f4c565b50958601958a8a85818110611093576110936139d4565b90506020028101906110a591906139e8565b6020013586019550836001019350505050610da0565b5060108311156110de5760405163c4c321d160e01b815260040160405180910390fd5b6001600160701b038211156111065760405163c4c321d160e01b815260040160405180910390fd5b5092959194509250565b3661111b8280613a54565b5f81811061112b5761112b6139d4565b610100029190910191506003905061114960a0830160808401613ac1565b60ff16111561116b5760405163c4c321d160e01b815260040160405180910390fd5b80606001355f0361118f576040516320bd63bd60e11b815260040160405180910390fd5b5f6111a060a0830160808401613ac1565b60ff160361128c575f806111bf6111ba6020850185613878565b61162f565b91509150815f14806111cf575080155b806111e057506001600160701b0382115b806111f157506001600160701b0381115b1561120f5760405163b22decbd60e01b815260040160405180910390fd5b606083013561126d602086013561122c60e0870160c08801613ae1565b6112365783611238565b845b61124860e0880160c08901613ae1565b6112525785611254565b845b61126460c0890160a08a01613b0b565b61ffff166116ab565b101561040b5760405163b2d3a00360e01b815260040160405180910390fd5b6112a461129f60a0830160808401613ac1565b61171c565b6112ea575f806112b8838560200135611738565b915091508180156112cc5750826060013581105b1561040b5760405163b2d3a00360e01b815260040160405180910390fd5b5050565b5f8167ffffffffffffffff81111561130857611308613b26565b60405190808252806020026020018201604052801561136357816020015b61135060405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b8152602001906001900390816113265790505b5090505f8267ffffffffffffffff81111561138057611380613b26565b6040519080825280602002602001820160405280156113a9578160200160208202803683370190505b5090506113b4613729565b5f86815b818110156113fb576113ef8a8a838181106113d5576113d56139d4565b90506020028101906113e791906139e8565b878787611aa3565b909201916001016113b8565b508682101561141d5760405163017cea0960e31b815260040160405180910390fd5b505050505050505050565b5f611431613729565b6001541561151657600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a49190613b3a565b81526005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115109190613b3a565b60208201525b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa15801561155a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157e9190613b3a565b905061158a8888611ddc565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156115ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f29190613b3a565b9050818111611601575f61160b565b61160b8282613aae565b93506001545f14611623576116238787878787611e72565b50505095945050505050565b5f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561166f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116939190613b7f565b506001600160701b0391821697911695509350505050565b5f8415806116b7575083155b806116c0575082155b156116cc57505f611714565b5f6116d983612710613aae565b6116e39087613bbf565b9050806116f286612710613bbf565b6116fc9190613bd6565b6117068583613bbf565b6117109190613bfd565b9150505b949350505050565b5f60ff821660021480611732575060ff82166003145b92915050565b5f8080806117496020870187613878565b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611784573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a89190613c10565b50949650929450506001600160a01b03851692505050600282900b5f6117d160208a018a613878565b6001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118309190613ca9565b6001600160801b03169050821580611846575080155b1561185b575f80965096505050505050611a9c565b5f61186c60c08b0160a08c01613b0b565b61187b9061ffff166064613bbf565b90505f61188e60c08c0160a08d01613b0b565b61189d9061ffff166002613ccf565b90505f811315806118b15750620f42408210155b156118c8575f809850985050505050505050611a9c565b5f620f42406118d78482613aae565b6118e1908d613bbf565b6118eb9190613bfd565b9050805f03611907575f80995099505050505050505050611a9c565b5f61191860e08e0160c08f01613ae1565b156119fe57606085901b5f61192d8985613bbf565b90508861193a8583613bfd565b14611955575f809c509c505050505050505050505050611a9c565b5f6119608284613bd6565b905082811015611981575f809d509d50505050505050505050505050611a9c565b61198c838b83611f8f565b93508984106119ac575f809d509d50505050505050505050505050611a9c565b6119be6119b98a88611fe1565b61201f565b8410156119dc575f809d509d50505050505050505050505050611a9c565b6119f4886119ea868d613aae565b600160601b61232e565b9c50505050611a8d565b611a0d82600160601b8761232e565b611a179088613bd6565b9050868111611a34575f809a509a50505050505050505050611a9c565b611a4c83611a428886611fe1565b6119b99190613cfe565b811115611a67575f809a509a50505050505050505050611a9c565b86611a80606087901b611a7a8385613aae565b8461232e565b611a8a9190613bfd565b99505b5f8a119a505050505050505050505b9250929050565b5f3681611ab08780613a54565b602089013594509092509050805f5b81811015611dd05736848483818110611ada57611ada6139d4565b6101000291909101915060039050611af860a0830160808401613ac1565b60ff161115611b1a5760405163c4c321d160e01b815260040160405180910390fd5b80606001355f03611b3e576040516320bd63bd60e11b815260040160405180910390fd5b82611b4a836001613bd6565b108015611bac5750611b626060820160408301613878565b6001600160a01b03168585611b78856001613bd6565b818110611b8757611b876139d4565b905061010002016020016020810190611ba09190613878565b6001600160a01b031614155b15611bca5760405163c4c321d160e01b815260040160405180910390fd5b5f5b82811015611c7b575f868683818110611be757611be76139d4565b905061010002016080016020810190611c009190613ac1565b60ff16148015611c555750611c186020830183613878565b6001600160a01b0316868683818110611c3357611c336139d4565b611c4a926020610100909202019081019150613878565b6001600160a01b0316145b15611c735760405163c4c321d160e01b815260040160405180910390fd5b600101611bcc565b505f611c8d60a0830160808401613ac1565b60ff1603611ca857611ca181878b8a6123e9565b9550611da7565b611cbb61129f60a0830160808401613ac1565b15611ccc5780606001359550611da7565b5f5b6020880151811015611d3957611ce76020830183613878565b6001600160a01b0316898281518110611d0257611d026139d4565b60200260200101516001600160a01b031603611d315760405163c4c321d160e01b815260040160405180910390fd5b600101611cce565b50611d476020820182613878565b88886001602002015181518110611d6057611d606139d4565b6001600160a01b03929092166020928302919091018201528701805160010190525f80611d8d8389611738565b9150915081611da0578260600135611da2565b805b975050505b855f03611dc75760405163c4c321d160e01b815260040160405180910390fd5b50600101611abf565b50505050949350505050565b805f5b8181101561040b57365f858584818110611dfb57611dfb6139d4565b9050602002810190611e0d91906139e8565b611e179080613a54565b915091505f611e4e8383898988818110611e3357611e336139d4565b9050602002810190611e4591906139e8565b602001356126fd565b90506001821115611e6457611e648383836129a7565b836001019350505050611ddf565b6004546001600160a01b038681169116148015611e9c57506005546001600160a01b038581169116145b15611ef8575f611ec082826020020151836001602002015160015460025488612c5c565b905080831015611ef25760405163c586146960e01b815260048101849052602481018290526044015b60405180910390fd5b50610be7565b6005546001600160a01b038681169116148015611f2257506004546001600160a01b038581169116145b15611f76575f611f4982826020020151836001602002015160015460025487600354612cee565b905080841115611ef2576040516319e76b0d60e11b81526004810185905260248101829052604401611ee9565b60405163a1a4353360e01b815260040160405180910390fd5b5f611f9b84848461232e565b90505f8280611fac57611fac613be9565b8486091115611fda575f198103611fd657604051631a93c68960e11b815260040160405180910390fd5b6001015b9392505050565b5f81611fed8185613d25565b611ff79190613ccf565b90505f83128015612010575061200d8284613d51565b15155b1561173257611fda8282613d64565b5f805f831261202e5782612032565b825f035b9050620d89e88111156120585760405163c4c321d160e01b815260040160405180910390fd5b5f816001165f0361206d57600160801b61207f565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156120b3576ffff97272373d413259a46990580e213a0260801c5b60048216156120d2576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156120f1576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612110576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561212f576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561214e576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561216d576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561218d576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156121ad576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156121cd576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156121ed576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561220d576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561222d576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561224d576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561226d576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561228e576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156122ae576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156122cd576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156122ea576b048a170391f7dc42444e8fa20260801c5b5f84131561230657805f198161230257612302613be9565b0490505b64010000000081061561231a57600161231c565b5f5b60ff16602082901c0192505050919050565b5f838302815f1985870982811083820303915050805f036123625783828161235857612358613be9565b0492505050611fda565b80841161238257604051631a93c68960e11b815260040160405180910390fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f19815b8351811015612448576124046020880188613878565b6001600160a01b031685828151811061241f5761241f6139d4565b60200260200101515f01516001600160a01b03160361244057809150612448565b6001016123ee565b505f198103612510575f806124636111ba60208a018a613878565b91509150815f1480612473575080155b8061248457506001600160701b0382115b8061249557506001600160701b0381115b156124b35760405163b22decbd60e01b815260040160405180910390fd5b84516040805160608101909152909350806124d160208b018b613878565b6001600160a01b03168152602001838152602001828152508684815181106124fb576124fb6139d4565b60209081029190910101525050825160010183525b5f848281518110612523576125236139d4565b60200260200101516020015190505f858381518110612544576125446139d4565b6020026020010151604001519050815f148061255e575080155b1561257c5760405163b22decbd60e01b815260040160405180910390fd5b6125c88761259060e08b0160c08c01613ae1565b61259a578261259c565b835b6125ac60e08c0160c08d01613ae1565b6125b657846125b8565b835b61126460c08d0160a08e01613b0b565b9350835f036125ea5760405163c4c321d160e01b815260040160405180910390fd5b6125fa60e0890160c08a01613ae1565b1561267a5780841061261f5760405163b22decbd60e01b815260040160405180910390fd5b6126298783613bd6565b86848151811061263b5761263b6139d4565b60209081029190910181015101526126538482613aae565b868481518110612665576126656139d4565b602002602001015160400181815250506126f2565b81841061269a5760405163b22decbd60e01b815260040160405180910390fd5b6126a48782613bd6565b8684815181106126b6576126b66139d4565b6020908102919091010151604001526126cf8483613aae565b8684815181106126e1576126e16139d4565b602002602001015160200181815250505b505050949350505050565b5f3684845f818110612711576127116139d4565b6101000291909101915050600184145f818061275b57505f8787600181811061273c5761273c6139d4565b9050610100020160800160208101906127559190613ac1565b60ff1614155b80612774575061277461129f60a0850160808601613ac1565b90505f816127ab578787600181811061278f5761278f6139d4565b6127a6926020610100909202019081019150613878565b6127ad565b305b90505f8215612831576127c66060860160408701613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561280a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282e9190613b3a565b90505b5f61284260a0870160808801613ac1565b60ff160361287f5761287061285d6040870160208801613878565b61286a6020880188613878565b89610b02565b61287a8583612d29565b6128d2565b600161289160a0870160808801613ac1565b60ff16036128a45761287a858389613034565b60026128b660a0870160808801613ac1565b60ff16036128c85761287a8588613266565b6128d285886134ef565b8215612997575f6128e96060870160408801613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561292d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129519190613b3a565b9050818111612960575f61296a565b61296a8282613aae565b965085606001358710156129915760405163b2d3a00360e01b815260040160405180910390fd5b5061299b565b5f95505b50505050509392505050565b8160015b81811015610be757368585838181106129c6576129c66139d4565b9050610100020190505f838360016129de9190613bd6565b1490505f8180612a2557505f88886129f7876001613bd6565b818110612a0657612a066139d4565b905061010002016080016020810190612a1f9190613ac1565b60ff1614155b80612a3e5750612a3e61129f60a0850160808601613ac1565b90505f81612a7e578888612a53876001613bd6565b818110612a6257612a626139d4565b612a79926020610100909202019081019150613878565b612a80565b305b90505f8215612b0457612a996060860160408701613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612add573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b019190613b3a565b90505b5f612b1560a0870160808801613ac1565b60ff1603612b58578715612b4957612b49612b366040870160208801613878565b612b436020880188613878565b8a610b02565b612b538583612d29565b612b83565b875f03612b785760405163c4c321d160e01b815260040160405180910390fd5b612b8385838a613034565b8215612c48575f612b9a6060870160408801613878565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612bde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c029190613b3a565b9050818111612c11575f612c1b565b612c1b8282613aae565b98508560600135891015612c425760405163b2d3a00360e01b815260040160405180910390fd5b50612c4c565b5f97505b85600101955050505050506129ab565b5f80612c688588613bd6565b9050808310612c8a5760405163af6ddbcd60e01b815260040160405180910390fd5b5f612c958588613bd6565b90505f612ca28284613bbf565b90505f612caf8685613aae565b90505f816001612cbf8286613bd6565b612cc99190613aae565b612cd39190613bfd565b9050612cdf8482613aae565b9b9a5050505050505050505050565b5f620f4240612cfd8382613aae565b612d0a898989898961366b565b612d149190613bbf565b612d1e9190613bfd565b979650505050505050565b5f80612d3b6111ba6020860186613878565b90925090506001600160701b03821180612d5b57506001600160701b0381115b15612d795760405163b22decbd60e01b815260040160405180910390fd5b5f612d8a60e0860160c08701613ae1565b612d945781612d96565b825b90505f612da960e0870160c08801613ae1565b612db35783612db5565b825b90505f612dc86040880160208901613878565b6001600160a01b03166370a08231612de360208a018a613878565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612e25573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e499190613b3a565b90505f838211612e59575f612e63565b612e638483613aae565b9050801580612e7857506001600160701b0381115b15612e965760405163c4c321d160e01b815260040160405180910390fd5b5f612ead82868661126460c08e0160a08f01613b0b565b9050805f03612ecf5760405163c4c321d160e01b815260040160405180910390fd5b6001600160a01b0388163014801590612eeb5750886060013581105b15612f095760405163b2d3a00360e01b815260040160405180910390fd5b612f1960e08a0160c08b01613ae1565b15612fa657612f2b60208a018a613878565b60405163022c0d9f60e01b81525f60048201819052602482018490526001600160a01b038b81166044840152608060648401526084830191909152919091169063022c0d9f9060a4015f604051808303815f87803b158015612f8b575f80fd5b505af1158015612f9d573d5f803e3d5ffd5b5050505061141d565b612fb360208a018a613878565b60405163022c0d9f60e01b8152600481018390525f602482018190526001600160a01b038b81166044840152608060648401526084830191909152919091169063022c0d9f9060a4015f604051808303815f87803b158015613013575f80fd5b505af1158015613025573d5f803e3d5ffd5b50505050505050505050505050565b80158061304757506001600160701b0381115b156130655760405163c4c321d160e01b815260040160405180910390fd5b6130726020840184613878565b600980546001600160a01b0319166001600160a01b03929092169190911790556130a26040840160208501613878565b600a80546001600160a01b0319166001600160a01b0392909216919091179055600b8190555f806130d66020860186613878565b6001600160a01b031663128acb08856130f560e0890160c08a01613ae1565b8661310660e08b0160c08c01613ae1565b6131245773fffd8963efd1fc6a506488495d951d5263988d2561312b565b6401000276a45b60405160e086901b6001600160e01b03191681526001600160a01b03948516600482015292151560248401526044830191909152909116606482015260a060848201525f60a482015260c40160408051808303815f875af1158015613192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b69190613d8a565b60095491935091506001600160a01b0316156131e557604051632c377d3360e11b815260040160405180910390fd5b5f6131f660e0870160c08801613ae1565b6132005782613202565b815b90505f81126132245760405163939c7a7760e01b815260040160405180910390fd5b6001600160a01b03851630148015906132485750606086013561324682613dac565b105b15610afa5760405163b2d3a00360e01b815260040160405180910390fd5b805f036132865760405163c4c321d160e01b815260040160405180910390fd5b60e082013560ff811690601e1a8082036132b35760405163c4c321d160e01b815260040160405180910390fd5b6132c36040850160208601613878565b6001600160a01b03166132d96020860186613878565b6001600160a01b031663c6610657846040518263ffffffff1660e01b815260040161330691815260200190565b602060405180830381865afa158015613321573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133459190613dc6565b6001600160a01b03161461336c5760405163c4c321d160e01b815260040160405180910390fd5b61337c6060850160408601613878565b6001600160a01b03166133926020860186613878565b6001600160a01b031663c6610657836040518263ffffffff1660e01b81526004016133bf91815260200190565b602060405180830381865afa1580156133da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133fe9190613dc6565b6001600160a01b0316146134255760405163c4c321d160e01b815260040160405180910390fd5b61344b6134386040860160208701613878565b6134456020870187613878565b856136ce565b6134586020850185613878565b604051630b68372160e31b8152600481018490526024810183905260448101859052606086013560648201526001600160a01b039190911690635b41b908906084015f604051808303815f87803b1580156134b1575f80fd5b505af11580156134c3573d5f803e3d5ffd5b5061040b92506134dc9150506040860160208701613878565b6134e96020870187613878565b5f6136ce565b805f0361350f5760405163c4c321d160e01b815260040160405180910390fd5b6135356135226040840160208501613878565b61352f6020850185613878565b836136ce565b6135426020830183613878565b6001600160a01b03166352bbbe296040518060c001604052808560e0013581526020015f60ff1681526020018560200160208101906135819190613878565b6001600160a01b0316815260200161359f6060870160408801613878565b6001600160a01b0316815260208082018690526040805180830182525f8082529382015280516080810182523080825292810184905280820192909252606080830193909352516001600160e01b031960e086901b16815261360a9392880135904290600401613de1565b6020604051808303815f875af1158015613626573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061364a9190613b3a565b506112ea61365e6040840160208501613878565b6134e96020850185613878565b5f806136778588613bd6565b90505f6136848588613bd6565b90505f6136918284613bbf565b90505f61369e8685613bd6565b90505f8160016136ae8286613bd6565b6136b89190613aae565b6136c29190613bfd565b9050612cdf8185613aae565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f92839290871691610b5d9190613a28565b60405180604001604052806002906020820280368337509192915050565b5f8083601f840112613757575f80fd5b50813567ffffffffffffffff81111561376e575f80fd5b6020830191508360208260051b8501011115611a9c575f80fd5b8015158114613795575f80fd5b50565b5f805f604084860312156137aa575f80fd5b833567ffffffffffffffff8111156137c0575f80fd5b6137cc86828701613747565b90945092505060208401356137e081613788565b809150509250925092565b5f805f80606085870312156137fe575f80fd5b8435935060208501359250604085013567ffffffffffffffff80821115613823575f80fd5b818701915087601f830112613836575f80fd5b813581811115613844575f80fd5b886020828501011115613855575f80fd5b95989497505060200194505050565b6001600160a01b0381168114613795575f80fd5b5f60208284031215613888575f80fd5b8135611fda81613864565b5f805f606084860312156138a5575f80fd5b83356138b081613864565b925060208401356138c081613864565b929592945050506040919091013590565b5f80604083850312156138e2575f80fd5b82356138ed81613864565b946020939093013593505050565b5f806040838503121561390c575f80fd5b823561391781613864565b9150602083013561392781613788565b809150509250929050565b5f805f8060608587031215613945575f80fd5b843567ffffffffffffffff81111561395b575f80fd5b61396787828801613747565b90989097506020870135966040013595509350505050565b5f805f60608486031215613991575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156139b9575f80fd5b82356139c481613864565b9150602083013561392781613864565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126139fc575f80fd5b9190910192915050565b5f5b83811015613a20578181015183820152602001613a08565b50505f910152565b5f82516139fc818460208701613a06565b5f60208284031215613a49575f80fd5b8151611fda81613788565b5f808335601e19843603018112613a69575f80fd5b83018035915067ffffffffffffffff821115613a83575f80fd5b6020019150600881901b3603821315611a9c575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8181038181111561173257611732613a9a565b5f60208284031215613ad1575f80fd5b813560ff81168114611fda575f80fd5b5f60208284031215613af1575f80fd5b8135611fda81613788565b61ffff81168114613795575f80fd5b5f60208284031215613b1b575f80fd5b8135611fda81613afc565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613b4a575f80fd5b5051919050565b80516001600160701b0381168114613b67575f80fd5b919050565b805163ffffffff81168114613b67575f80fd5b5f805f60608486031215613b91575f80fd5b613b9a84613b51565b9250613ba860208501613b51565b9150613bb660408501613b6c565b90509250925092565b808202811582820484141761173257611732613a9a565b8082018082111561173257611732613a9a565b634e487b7160e01b5f52601260045260245ffd5b5f82613c0b57613c0b613be9565b500490565b5f805f805f805f60e0888a031215613c26575f80fd5b8751613c3181613864565b8097505060208801518060020b8114613c48575f80fd5b6040890151909650613c5981613afc565b6060890151909550613c6a81613afc565b6080890151909450613c7b81613afc565b9250613c8960a08901613b6c565b915060c0880151613c9981613788565b8091505092959891949750929550565b5f60208284031215613cb9575f80fd5b81516001600160801b0381168114611fda575f80fd5b8082025f8212600160ff1b84141615613cea57613cea613a9a565b818105831482151761173257611732613a9a565b8082018281125f831280158216821582161715613d1d57613d1d613a9a565b505092915050565b5f82613d3357613d33613be9565b600160ff1b82145f1984141615613d4c57613d4c613a9a565b500590565b5f82613d5f57613d5f613be9565b500790565b8181035f831280158383131683831282161715613d8357613d83613a9a565b5092915050565b5f8060408385031215613d9b575f80fd5b505080516020909101519092909150565b5f600160ff1b8201613dc057613dc0613a9a565b505f0390565b5f60208284031215613dd6575f80fd5b8151611fda81613864565b60e08152845160e082015260ff6020860151166101008201525f604086015160018060a01b03808216610120850152806060890151166101408501525050608086015161016083015260a086015160c06101808401528051806101a08501526101c0613e538282870160208601613a06565b601f91909101601f19168401019150613ea19050602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c001529291505056