60806040523480156200001157600080fd5b5060405162002696380380620026968339810160408190526200003491620004c1565b8033816200004281620000e4565b506001600160a01b0381166200007357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007e81620000f6565b50806200008b4662000148565b6200009630620001e1565b604051602001620000aa9392919062000579565b60405160208183030381529060405260049081620000c9919062000668565b5050600580546001600160a01b0319163317905550620007aa565b6002620000f2828262000668565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060006200015783620001ff565b60010190506000816001600160401b0381111562000179576200017962000485565b6040519080825280601f01601f191660200182016040528015620001a4576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084620001ae57509392505050565b6060620001f96001600160a01b0383166014620002e8565b92915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831062000249577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062000276576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200029557662386f26fc10000830492506010015b6305f5e1008310620002ae576305f5e100830492506008015b6127108310620002c357612710830492506004015b60648310620002d6576064830492506002015b600a8310620001f95760010192915050565b6060826000620002fa8460026200074a565b6200030790600262000764565b6001600160401b0381111562000321576200032162000485565b6040519080825280601f01601f1916602001820160405280156200034c576020820181803683370190505b509050600360fc1b816000815181106200036a576200036a6200077a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106200039c576200039c6200077a565b60200101906001600160f81b031916908160001a9053506000620003c28560026200074a565b620003cf90600162000764565b90505b600181111562000451576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106200040757620004076200077a565b1a60f81b8282815181106200042057620004206200077a565b60200101906001600160f81b031916908160001a90535060049290921c91620004498162000790565b9050620003d2565b5081156200047d5760405163e22e27eb60e01b815260048101869052602481018590526044016200006a565b949350505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004b85781810151838201526020016200049e565b50506000910152565b600060208284031215620004d457600080fd5b81516001600160401b0380821115620004ec57600080fd5b818401915084601f8301126200050157600080fd5b81518181111562000516576200051662000485565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000485565b816040528281528760208487010111156200055b57600080fd5b6200056e8360208301602088016200049b565b979650505050505050565b600084516200058d8184602089016200049b565b8083019050602f60f81b8082528551620005af816001850160208a016200049b565b60019201918201528351620005cc8160028401602088016200049b565b0160020195945050505050565b600181811c90821680620005ee57607f821691505b6020821081036200060f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066357600081815260208120601f850160051c810160208610156200063e5750805b601f850160051c820191505b818110156200065f578281556001016200064a565b5050505b505050565b81516001600160401b0381111562000684576200068462000485565b6200069c81620006958454620005d9565b8462000615565b602080601f831160018114620006d45760008415620006bb5750858301515b600019600386901b1c1916600185901b1785556200065f565b600085815260208120601f198616915b828110156200070557888601518255948401946001909101908401620006e4565b5085821015620007245787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620001f957620001f962000734565b80820180821115620001f957620001f962000734565b634e487b7160e01b600052603260045260246000fd5b600081620007a257620007a262000734565b506000190190565b611edc80620007ba6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80634eb03f6e116100ad578063a22cb46511610071578063a22cb46514610299578063c30f4a5a146102ac578063e985e9c5146102bf578063f242432a146102d2578063f2fde38b146102e557600080fd5b80634eb03f6e14610237578063715018a61461024a5780638ccc5f80146102525780638da5cb5b14610275578063945adc3c1461028657600080fd5b806327810b6e116100f457806327810b6e146101b95780632eb2c2d6146101cc5780633266b6ec146101e15780634adc2856146101f45780634e1273f41461021757600080fd5b8062fdd58e1461012557806301ffc9a71461014b578063075461721461016e5780630e89341c14610199575b600080fd5b610138610133366004611510565b6102f8565b6040519081526020015b60405180910390f35b61015e610159366004611550565b610320565b6040519015158152602001610142565b600554610181906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101ac6101a7366004611574565b610370565b60405161014291906115dd565b600754610181906001600160a01b031681565b6101df6101da36600461173e565b6103a4565b005b6101df6101ef3660046117e8565b610410565b61015e610202366004611574565b60086020526000908152604090205460ff1681565b61022a610225366004611803565b61043a565b60405161014291906118fe565b6101df6102453660046117e8565b61050f565b6101df610539565b61015e610260366004611574565b60066020526000908152604090205460ff1681565b6003546001600160a01b0316610181565b6101df610294366004611911565b61054d565b6101df6102a73660046119b0565b6105c0565b6101df6102ba3660046119ec565b6105cf565b61015e6102cd366004611a35565b610619565b6101df6102e0366004611a68565b610647565b6101df6102f33660046117e8565b6106a6565b6000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061035157506001600160e01b031982166303a24d0760e21b145b8061031a57506301ffc9a760e01b6001600160e01b031983161461031a565b6060600461037d836106e4565b60405160200161038e929190611b07565b6040516020818303038152906040529050919050565b336001600160a01b03861681148015906103c557506103c38682610619565b155b156103fb5760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b6104088686868686610777565b505050505050565b6104186107de565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6060815183511461046b5781518351604051635b05999160e01b8152600481019290925260248201526044016103f2565b6000835167ffffffffffffffff811115610487576104876115f0565b6040519080825280602002602001820160405280156104b0578160200160208202803683370190505b50905060005b8451811015610507576020808202860101516104da906020808402870101516102f8565b8282815181106104ec576104ec611b9b565b602090810291909101015261050081611bc7565b90506104b6565b509392505050565b6105176107de565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6105416107de565b61054b600061080b565b565b61055b86868686868661085d565b610576868686604051806020016040528060008152506109fa565b604080516001600160a01b0388168152602081018790527fc46d52557c8b75118f1a05ed3c30048fa2b046e9f78b368529333915e7b69501910160405180910390a1505050505050565b6105cb338383610a57565b5050565b6105d76107de565b806105e1466106e4565b6105ea30610aed565b6040516020016105fc93929190611be0565b604051602081830303815290604052600490816105cb9190611c85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b038616811480159061066857506106668682610619565b155b156106995760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044016103f2565b6104088686868686610b03565b6106ae6107de565b6001600160a01b0381166106d857604051631e4fbdf760e01b8152600060048201526024016103f2565b6106e18161080b565b50565b606060006106f183610b91565b600101905060008167ffffffffffffffff811115610711576107116115f0565b6040519080825280601f01601f19166020018201604052801561073b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461074557509392505050565b6001600160a01b0384166107a157604051632bfa23e760e11b8152600060048201526024016103f2565b6001600160a01b0385166107ca57604051626a0d4560e21b8152600060048201526024016103f2565b6107d78585858585610c69565b5050505050565b6003546001600160a01b0316331461054b5760405163118cdaa760e01b81523360048201526024016103f2565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160e0602082018190526004610100830152631b5a5b9d60e21b6101208084019190915246838501523060608401526001600160a01b038a16608084015260a0830189905260c083018890529082018690528251808303909101815261014082019092526000906108d690839061016001611d45565b60408051601f1981840301815291815281516020928301206000818152600690935291205490915060ff16156109375760405162461bcd60e51b81526020600482015260066024820152651b5a5b9d195960d21b60448201526064016103f2565b600081815260066020908152604091829020805460ff191660011790556005548251601f87018390048302810183019093528583526001600160a01b0316916109a69187908790819084018382808284376000920191909152506109a09250869150610cbc9050565b90610cef565b6001600160a01b0316146109f05760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b60448201526064016103f2565b5050505050505050565b6001600160a01b038416610a2457604051632bfa23e760e11b8152600060048201526024016103f2565b60408051600180825260208201869052818301908152606082018590526080820190925290610408600087848487610c69565b6001600160a01b038216610a805760405162ced3e160e81b8152600060048201526024016103f2565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606061031a6001600160a01b0383166014610d19565b6001600160a01b038416610b2d57604051632bfa23e760e11b8152600060048201526024016103f2565b6001600160a01b038516610b5657604051626a0d4560e21b8152600060048201526024016103f2565b60408051600180825260208201869052818301908152606082018590526080820190925290610b888787848487610c69565b50505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610bd05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610bfc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610c1a57662386f26fc10000830492506010015b6305f5e1008310610c32576305f5e100830492506008015b6127108310610c4657612710830492506004015b60648310610c58576064830492506002015b600a831061031a5760010192915050565b610c7585858585610e99565b6001600160a01b038416156107d75782513390600103610cae5760208481015190840151610ca7838989858589610ef5565b5050610408565b610408818787878787611019565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b600080600080610cff8686611102565b925092509250610d0f828261114f565b5090949350505050565b6060826000610d29846002611d61565b610d34906002611d78565b67ffffffffffffffff811115610d4c57610d4c6115f0565b6040519080825280601f01601f191660200182016040528015610d76576020820181803683370190505b509050600360fc1b81600081518110610d9157610d91611b9b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610dc057610dc0611b9b565b60200101906001600160f81b031916908160001a9053506000610de4856002611d61565b610def906001611d78565b90505b6001811115610e67576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110610e2357610e23611b9b565b1a60f81b828281518110610e3957610e39611b9b565b60200101906001600160f81b031916908160001a90535060049290921c91610e6081611d8b565b9050610df2565b508115610e915760405163e22e27eb60e01b815260048101869052602481018590526044016103f2565b949350505050565b6001600160a01b03841615610ee35760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b60448201526064016103f2565b610eef84848484611208565b50505050565b6001600160a01b0384163b156104085760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610f399089908990889088908890600401611da2565b6020604051808303816000875af1925050508015610f74575060408051601f3d908101601f19168201909252610f7191810190611de7565b60015b610fdd573d808015610fa2576040519150601f19603f3d011682016040523d82523d6000602084013e610fa7565b606091505b508051600003610fd557604051632bfa23e760e11b81526001600160a01b03861660048201526024016103f2565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b14610b8857604051632bfa23e760e11b81526001600160a01b03861660048201526024016103f2565b6001600160a01b0384163b156104085760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061105d9089908990889088908890600401611e04565b6020604051808303816000875af1925050508015611098575060408051601f3d908101601f1916820190925261109591810190611de7565b60015b6110c6573d808015610fa2576040519150601f19603f3d011682016040523d82523d6000602084013e610fa7565b6001600160e01b0319811663bc197c8160e01b14610b8857604051632bfa23e760e11b81526001600160a01b03861660048201526024016103f2565b6000806000835160410361113c5760208401516040850151606086015160001a61112e88828585611425565b955095509550505050611148565b50508151600091506002905b9250925092565b600082600381111561116357611163611e62565b0361116c575050565b600182600381111561118057611180611e62565b0361119e5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156111b2576111b2611e62565b036111d35760405163fce698f760e01b8152600481018290526024016103f2565b60038260038111156111e7576111e7611e62565b036105cb576040516335e2f38360e21b8152600481018290526024016103f2565b80518251146112375781518151604051635b05999160e01b8152600481019290925260248201526044016103f2565b3360005b8351811015611346576020818102858101820151908501909101516001600160a01b038816156112ee576000828152602081815260408083206001600160a01b038c168452909152902054818110156112c7576040516303dee4c560e01b81526001600160a01b038a1660048201526024810182905260448101839052606481018490526084016103f2565b6000838152602081815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b03871615611333576000828152602081815260408083206001600160a01b038b1684529091528120805483929061132d908490611d78565b90915550505b50508061133f90611bc7565b905061123b565b5082516001036113c75760208301516000906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516113b8929190918252602082015260400190565b60405180910390a450506107d7565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611416929190611e78565b60405180910390a45050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561146057506000915060039050826114ea565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156114b4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114e0575060009250600191508290506114ea565b9250600091508190505b9450945094915050565b80356001600160a01b038116811461150b57600080fd5b919050565b6000806040838503121561152357600080fd5b61152c836114f4565b946020939093013593505050565b6001600160e01b0319811681146106e157600080fd5b60006020828403121561156257600080fd5b813561156d8161153a565b9392505050565b60006020828403121561158657600080fd5b5035919050565b60005b838110156115a8578181015183820152602001611590565b50506000910152565b600081518084526115c981602086016020860161158d565b601f01601f19169290920160200192915050565b60208152600061156d60208301846115b1565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561162f5761162f6115f0565b604052919050565b600067ffffffffffffffff821115611651576116516115f0565b5060051b60200190565b600082601f83011261166c57600080fd5b8135602061168161167c83611637565b611606565b82815260059290921b840181019181810190868411156116a057600080fd5b8286015b848110156116bb57803583529183019183016116a4565b509695505050505050565b600067ffffffffffffffff8311156116e0576116e06115f0565b6116f3601f8401601f1916602001611606565b905082815283838301111561170757600080fd5b828260208301376000602084830101529392505050565b600082601f83011261172f57600080fd5b61156d838335602085016116c6565b600080600080600060a0868803121561175657600080fd5b61175f866114f4565b945061176d602087016114f4565b9350604086013567ffffffffffffffff8082111561178a57600080fd5b61179689838a0161165b565b945060608801359150808211156117ac57600080fd5b6117b889838a0161165b565b935060808801359150808211156117ce57600080fd5b506117db8882890161171e565b9150509295509295909350565b6000602082840312156117fa57600080fd5b61156d826114f4565b6000806040838503121561181657600080fd5b823567ffffffffffffffff8082111561182e57600080fd5b818501915085601f83011261184257600080fd5b8135602061185261167c83611637565b82815260059290921b8401810191818101908984111561187157600080fd5b948201945b8386101561189657611887866114f4565b82529482019490820190611876565b965050860135925050808211156118ac57600080fd5b506118b98582860161165b565b9150509250929050565b600081518084526020808501945080840160005b838110156118f3578151875295820195908201906001016118d7565b509495945050505050565b60208152600061156d60208301846118c3565b60008060008060008060a0878903121561192a57600080fd5b611933876114f4565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff8082111561196557600080fd5b818901915089601f83011261197957600080fd5b81358181111561198857600080fd5b8a602082850101111561199a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156119c357600080fd5b6119cc836114f4565b9150602083013580151581146119e157600080fd5b809150509250929050565b6000602082840312156119fe57600080fd5b813567ffffffffffffffff811115611a1557600080fd5b8201601f81018413611a2657600080fd5b610e91848235602084016116c6565b60008060408385031215611a4857600080fd5b611a51836114f4565b9150611a5f602084016114f4565b90509250929050565b600080600080600060a08688031215611a8057600080fd5b611a89866114f4565b9450611a97602087016114f4565b93506040860135925060608601359150608086013567ffffffffffffffff811115611ac157600080fd5b6117db8882890161171e565b600181811c90821680611ae157607f821691505b602082108103611b0157634e487b7160e01b600052602260045260246000fd5b50919050565b6000808454611b1581611acd565b60018281168015611b2d5760018114611b4257611b71565b60ff1984168752821515830287019450611b71565b8860005260208060002060005b85811015611b685781548a820152908401908201611b4f565b50505082870194505b50602f60f81b845286519250611b8d8382860160208a0161158d565b919092010195945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611bd957611bd9611bb1565b5060010190565b60008451611bf281846020890161158d565b8083019050602f60f81b8082528551611c12816001850160208a0161158d565b60019201918201528351611c2d81600284016020880161158d565b0160020195945050505050565b601f821115611c8057600081815260208120601f850160051c81016020861015611c615750805b601f850160051c820191505b8181101561040857828155600101611c6d565b505050565b815167ffffffffffffffff811115611c9f57611c9f6115f0565b611cb381611cad8454611acd565b84611c3a565b602080601f831160018114611ce85760008415611cd05750858301515b600019600386901b1c1916600185901b178555610408565b600085815260208120601f198616915b82811015611d1757888601518255948401946001909101908401611cf8565b5085821015611d355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251611d5781846020870161158d565b9190910192915050565b808202811582820484141761031a5761031a611bb1565b8082018082111561031a5761031a611bb1565b600081611d9a57611d9a611bb1565b506000190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ddc908301846115b1565b979650505050505050565b600060208284031215611df957600080fd5b815161156d8161153a565b6001600160a01b0386811682528516602082015260a060408201819052600090611e30908301866118c3565b8281036060840152611e4281866118c3565b90508281036080840152611e5681856115b1565b98975050505050505050565b634e487b7160e01b600052602160045260246000fd5b604081526000611e8b60408301856118c3565b8281036020840152611e9d81856118c3565b9594505050505056fea2646970667358221220601885388f3dd75f09bea5a85ca2324fb36f48b638dbd5be4ef38c169fbfa80264736f6c634300081400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e687474703a2f2f6465762d7374617469632d66696c65732e6461746164616e63652e636f2f6e66742f66696c6573000000000000000000000000000000000000