0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614b9f80620000f36000396000f3fe608060405234801561001057600080fd5b506004361061043e5760003560e01c80639773ee6011610236578063c06a62011161013b578063e36c3140116100c3578063f00e022311610087578063f00e022314610aad578063f10b256914610ace578063f51c0fe714610ad7578063f6a3c09014610aea578063fc8b821c14610afd57600080fd5b8063e36c314014610a4b578063e514fe5514610a53578063e61befa714610a5b578063e6aa216c14610a70578063ea18568b14610a9a57600080fd5b8063d6275dd71161010a578063d6275dd714610a08578063de271c6d14610a1b578063e0bcb37814610a25578063e10025e614610a2e578063e2f6339214610a3657600080fd5b8063c06a6201146109bc578063d06628ed146109cf578063d0a8f679146109e2578063d547741f146109f557600080fd5b8063a71b3907116101be578063ae815a041161018d578063ae815a0414610960578063b17b4d861461096a578063b5c25ba61461098b578063b940a00314610993578063be48e58d146109a757600080fd5b8063a71b390714610914578063a8c3a3a81461091c578063abe3219c1461093f578063ae541d651461094d57600080fd5b8063a0c5438711610205578063a0c54387146108d4578063a217fddf146108e7578063a220c2d3146108ef578063a373786914610902578063a6870e5b1461090c57600080fd5b80639773ee601461087757806397a3a10a146108af5780639bfdf9a4146108b95780639ee804cb146108c157600080fd5b806349115a2e11610347578063712033eb116102cf578063844007fe11610293578063844007fe146108235780638456cb59146108365780638ca8703c1461083e57806391d1485414610851578063962c1e051461086457600080fd5b8063712033eb146107c15780637150bc5b146107c9578063735efb96146107ea578063749f7d8a146107fd578063818c8b261461081057600080fd5b80635c7ccd3b116103165780635c7ccd3b1461077e5780635c975abb14610791578063615a02531461079c57806361f00c17146107a457806367fbf731146107ae57600080fd5b806349115a2e146107535780634f560abd1461075b5780635063b5bd1461076357806352e0fc801461076b57600080fd5b80632f739b1d116103ca5780633ba0b9a9116103995780633ba0b9a9146105b95780633e23a827146105e95780633f4ba83a1461070d578063485cc95514610715578063490ffa351461072857600080fd5b80632f739b1d14610514578063342280b31461053857806336568abe146105455780633b5eb03a1461055857600080fd5b8063127103611161041157806312710361146104a257806316515428146104b7578063248a9ca3146104c957806329f96856146104ec5780632f2ff15d1461050157600080fd5b806301ffc9a714610443578063052a68401461046b5780630989001c1461048e578063101b6e3414610498575b600080fd5b610456610451366004613f9e565b610b05565b60405190151581526020015b60405180910390f35b610480600080516020614aca83398151915281565b604051908152602001610462565b61048061010d5481565b6104a0610b3c565b005b610480600080516020614aaa83398151915281565b60fb5461045690610100900460ff1681565b6104806104d7366004613fc8565b60009081526065602052604090206001015490565b610480600080516020614b4a83398151915281565b6104a061050f366004613ff6565b610b87565b610456610522366004614026565b61010f6020526000908152604090205460ff1681565b60fb546104569060ff1681565b6104a0610553366004613ff6565b610bb1565b6101055461010654610107546105a692916001600160801b0380821692600160801b928390048216929181169163ffffffff908204811691600160a01b8104821691600160c01b9091041687565b6040516104629796959493929190614043565b6101025461010354610104546105ce92919083565b60408051938452602084019290925290820152606001610462565b6106986040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e081018252610105548152610106546001600160801b038082166020840152600160801b9182900481169383019390935261010754928316606083015263ffffffff90830481166080830152600160a01b8304811660a0830152600160c01b90920490911660c082015290565b6040516104629190600060e0820190508251825260208301516001600160801b0380821660208501528060408601511660408501528060608601511660608501525050608083015163ffffffff80821660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b6104a0610c34565b6104a0610723366004614087565b610c4a565b60fe5461073b906001600160a01b031681565b6040516001600160a01b039091168152602001610462565b610480610e84565b6104a0610ea2565b610480610ef2565b6104a0610779366004614026565b610f0b565b6104a061078c3660046140b5565b61102c565b60975460ff16610456565b61048061141a565b6104806101095481565b6104a06107bc3660046140df565b611433565b6104a0611725565b6104806107d7366004613fc8565b6101166020526000908152604090205481565b6104a06107f836600461411c565b6117c2565b6104a061080b366004613fc8565b611c91565b6104a061081e366004614157565b611cc0565b6104a0610831366004613fc8565b611f11565b6104a0611f40565b6104a061084c366004613fc8565b611f5f565b61045661085f366004613ff6565b611fdf565b6104a0610872366004613fc8565b61200a565b61089c610885366004613fc8565b6101126020526000908152604090205461ffff1681565b60405161ffff9091168152602001610462565b6104806101085481565b6104a0612057565b6104a06108cf366004614026565b6120c8565b6104806108e2366004614189565b612132565b610480600081565b6104a06108fd3660046140df565b612283565b61048061010b5481565b60fd54610480565b6104806126c3565b60fc5460fd5461092a919082565b60408051928352602083019190915201610462565b61010e546104569060ff1681565b6104a061095b3660046141a4565b6126dc565b61048061010a5481565b610480610978366004614189565b6101146020526000908152604090205481565b610480612b2a565b60ff5461010054610101546105ce92919083565b610480600080516020614aea83398151915281565b6104a06109ca366004613fc8565b612b43565b6104806109dd366004614189565b612b72565b6104a06109f0366004613fc8565b612cae565b6104a0610a03366004613ff6565b612d00565b6104a0610a16366004614026565b612d25565b61048061010c5481565b61048061271081565b6104a0612e26565b610480600080516020614b2a83398151915281565b610480600381565b6104a0612ee0565b610480600080516020614b0a83398151915281565b610a78612f22565b6040805182518152602080840151908201529181015190820152606001610462565b6104a0610aa8366004613fc8565b612f6e565b610480610abb366004614189565b6101136020526000908152604090205481565b61048061c4e081565b6104a0610ae5366004613fc8565b612f9d565b6104a0610af83660046141b7565b612fcc565b6104806131d7565b60006001600160e01b03198216637965db0b60e01b1480610b3657506301ffc9a760e01b6001600160e01b03198316145b92915050565b610b446131f0565b60fb5460ff16610b675760405163b1df7eb360e01b815260040160405180910390fd5b610b6f612e26565b610100546101015460ff54610b85929190613236565b565b600082815260656020526040902060010154610ba28161328c565b610bac8383613296565b505050565b6001600160a01b0381163314610c265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610c30828261331c565b5050565b6000610c3f8161328c565b610c47613383565b50565b600054610100900460ff1615808015610c6a5750600054600160ff909116105b80610c845750303b158015610c84575060005460ff166001145b610ce75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c1d565b6000805460ff191660011790558015610d0a576000805461ff0019166101001790555b610d13836133d0565b610d1c826133d0565b610d246133f7565b610d2c61341e565b610d3461344d565b6101f461010855610d55600080516020614aaa833981519152611c2061347c565b610d6f600080516020614b2a833981519152611c2061347c565b610d89600080516020614b4a833981519152611c2061347c565b610da3600080516020614b0a83398151915261384061347c565b610dbd600080516020614aca83398151915261c4e061347c565b610dd7600080516020614aea833981519152611c2061347c565b60fe80546001600160a01b0319166001600160a01b038416179055610dfd600084613296565b6040516001600160a01b03831681527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a18015610bac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6000610e9d600080516020614b4a833981519152613510565b905090565b60fe54610eb99033906001600160a01b031661355c565b61010e805460ff191660011790556040517f3328bda355014adfb66d5d9086ab2c3204d1af7f83a69a3276daeed721f6ce3c90600090a1565b6000610e9d600080516020614b0a833981519152613510565b60fe54610f229033906001600160a01b031661355c565b610f2b816133d0565b6001600160a01b038116600090815261010f602052604090205460ff16610f655760405163f9644b0760e01b815260040160405180910390fd5b6101095461010d54610f7791906141df565b431015610f975760405163111bb2f160e31b815260040160405180910390fd5b600361010a5411610fbb5760405163dfffd22f60e01b815260040160405180910390fd5b4361010d556001600160a01b038116600090815261010f60205260408120805460ff1916905561010a805491610ff0836141f2565b90915550506040516001600160a01b038216907f6d1de2fb0c63996bae7ba6277c720c0560ba42874ea34c1ebe8e1423b9b4742190600090a250565b33600090815261010f602052604090205460ff1661105d57604051633e2100a160e01b815260040160405180910390fd5b600361010a5410156110825760405163dfffd22f60e01b815260040160405180910390fd5b61108a6131f0565b438135106110ab57604051633bb0413f60e01b815260040160405180910390fd5b600080516020614b4a83398151915260009081526101166020527f0683174ee47ba7ded338389c4047f439d06240e01796e9941d2e1ad04002de1b546110f290833561421f565b11156111115760405163222ea98560e01b815260040160405180910390fd5b60003382356111266040850160208601614248565b6111366060860160408701614248565b6111466080870160608801614248565b61115660a0880160808901614277565b61116660c0890160a08a01614277565b61117660e08a0160c08b01614277565b604080516001600160a01b0390991660208a01528801969096526001600160801b0394851660608801529284166080870152921660a085015263ffffffff91821660c0850152811660e08401521661010082015261012001604051602081830303815290604052805190602001209050600082600001358360200160208101906112009190614248565b6112106060860160408701614248565b6112206080870160608801614248565b61123060a0880160808901614277565b61124060c0890160a08a01614277565b61125060e08a0160c08b01614277565b6040516020016112669796959493929190614043565b604051602081830303815290604052805190602001209050600061128a83836135e3565b9050337f72745b0271618e5d84d738ea416e3a3be6eb267e0f639198f63c0ef124c29ffc85356112c06040880160208901614248565b6112d06060890160408a01614248565b6112e060808a0160608b01614248565b6112f060a08b0160808c01614277565b61130060c08c0160a08d01614277565b61131060e08d0160c08e01614277565b42604051611325989796959493929190614294565b60405180910390a2600261010a5461133d91906142e1565b6113489060016141df565b8160ff161015801561135d5750610105548435115b1561141457836101056113708282614302565b507f6988248fd82a7ce842fbdce0c49889ad926bf1548bae4194de0006498d069c94905084356113a66040870160208801614248565b6113b66060880160408901614248565b6113c66080890160608a01614248565b6113d660a08a0160808b01614277565b6113e660c08b0160a08c01614277565b6113f660e08c0160c08d01614277565b4260405161140b989796959493929190614294565b60405180910390a15b50505050565b6000610e9d600080516020614aea833981519152613510565b33600090815261010f602052604090205460ff1661146457604051633e2100a160e01b815260040160405180910390fd5b600361010a5410156114895760405163dfffd22f60e01b815260040160405180910390fd5b6114916131f0565b438135106114b257604051633bb0413f60e01b815260040160405180910390fd5b6114ba6126c3565b8135146114da5760405163222ea98560e01b815260040160405180910390fd5b61010b546114e99060016141df565b81602001351461150c5760405163b59f801760e01b815260040160405180910390fd5b600061151b604083018361441c565b60405160200161152c929190614528565b60405160208183030381529060405290506000338360200135836040516020016115589392919061458c565b60405160208183030381529060405280519060200120905060008360200135836040516020016115899291906145b3565b60405160208183030381529060405280519060200120905060006115ad83836135e3565b9050337f51308cad1da8fe95d4be43112c17d5651d3e3713a675ec61c2214fa16d9f6beb60208701354388356115e660408b018b61441c565b6040516115f79594939291906145cc565b60405180910390a2600261010a5461160f91906142e1565b61161a9060016141df565b8160ff161061171e57602085013561010b55600061163b604087018761441c565b9050905060005b818110156116cf57600061168361165c60408a018a61441c565b8481811061166c5761166c6145fd565b905060200281019061167e9190614613565b613680565b600081815261011260205260408120805492935061ffff90921691906116a88361465a565b91906101000a81548161ffff021916908361ffff1602179055505081600101915050611642565b507f5454855cf2eeb89296b9e10ba0881425fa305f06ce9ccb1b0ce47bc2f107a19160208701354361170460408a018a61441c565b604051611714949392919061467b565b60405180910390a1505b5050505050565b60fb5460ff161561174957604051632178bc4d60e11b815260040160405180910390fd5b60fe546117609033906001600160a01b031661355c565b60fb805460ff610100808304821615810261ff001990931692909217928390556040517fc59a5de02f9d69be770ff0d61bbc894968433bb599f9fd9c2016e149c509c5e5936117b89390049091161515815260200190565b60405180910390a1565b6117ca613716565b33600090815261010f602052604090205460ff166117fb57604051633e2100a160e01b815260040160405180910390fd5b600361010a5410156118205760405163dfffd22f60e01b815260040160405180910390fd5b6118286131f0565b4381602001351061184c57604051633bb0413f60e01b815260040160405180910390fd5b600080516020614aea833981519152600090815261011660209081527f7a641f2a170436cb9ff0edd342e448ed4a6e9ee295946f1b627f5ee896014a73546118969184013561421f565b11156118b55760405163222ea98560e01b815260040160405180910390fd5b60006118c4604083018361441c565b6118d1606085018561441c565b6118de608087018761441c565b6040516020016118f39695949392919061469b565b60408051601f1981840301815291905290506000336119156020850185614189565b84602001358460405160200161192e94939291906146e4565b60408051601f198184030181529190528051602091820120915060009061195790850185614189565b84602001358460405160200161196f93929190614714565b604051602081830303815290604052805190602001209050600061199383836135e3565b9050337f9827231af99e07dd2167998d4c6855a2f78e0eead80a6a490393b1c3ead048a16119c46020880188614189565b60208801356119d660408a018a61441c565b6119e360608c018c61441c565b6119f060808e018e61441c565b42604051611a0699989796959493929190614736565b60405180910390a2600261010a54611a1e91906142e1565b611a299060016141df565b8160ff1610158015611a6457506101146000611a486020880188614189565b60ff1660ff168152602001908152602001600020548560200135115b15611c83576020850180359061011490600090611a819089614189565b60ff16815260208082019290925260409081016000209290925560fe5482516306ccb9d760e41b815292516001600160a01b0390911692636ccb9d709260048083019391928290030181865afa158015611adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b039190614798565b6001600160a01b03166399d055c8611b1e6020880188614189565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015611b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b809190614798565b6001600160a01b03166313797bff611b9b604088018861441c565b611ba860608a018a61441c565b611bb560808c018c61441c565b6040518763ffffffff1660e01b8152600401611bd69695949392919061469b565b600060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b507f64a4ab6f7a6ca6fe9c5750207ea4a9d3e2d5f5ba81f707146b7b20624f61cf119250611c389150506020870187614189565b6020870135611c4a604089018961441c565b611c5760608b018b61441c565b611c6460808d018d61441c565b42604051611c7a99989796959493929190614736565b60405180910390a15b50505050610c47600160c955565b60fe54611ca89033906001600160a01b031661355c565b610c47600080516020614b2a8339815191528261347c565b33600090815261010f602052604090205460ff16611cf157604051633e2100a160e01b815260040160405180910390fd5b600361010a541015611d165760405163dfffd22f60e01b815260040160405180910390fd5b60fb5460ff1615611d3a57604051632178bc4d60e11b815260040160405180910390fd5b611d426131f0565b60fb54610100900460ff1615611d6a5760405162ff240360e21b815260040160405180910390fd5b43813510611d8b57604051633bb0413f60e01b815260040160405180910390fd5b600080516020614aaa83398151915260009081526101166020527f78e40c6661d84c085b652d9fa30921a229e88abd691be104ff2436753fe240c454611dd290833561421f565b1115611df15760405163222ea98560e01b815260040160405180910390fd5b6040805133602080830191909152833582840152830135606082015290820135608082015260009060a00160408051808303601f190181528282528051602091820120853582850152908501358383015290840135606083015291506000906080016040516020818303038152906040528051906020012090506000611e7783836135e3565b6040805186358152602080880135908201528682013581830152426060820152905191925033917f73327a5c0fdb3104b4a0f993bc20ce59885ac5bfe5f23e4bfdd19c21fb79cb129181900360800190a2600261010a54611ed891906142e1565b611ee39060016141df565b8160ff1610158015611ef85750610102548435115b1561141457611414602085013560408601358635613776565b60fe54611f289033906001600160a01b031661355c565b610c47600080516020614b4a8339815191528261347c565b60fe54611f579033906001600160a01b031661355c565b610b8561388b565b60fe54611f769033906001600160a01b031661355c565b801580611f84575061271081115b15611fa25760405163b14f197760e01b815260040160405180910390fd5b6101088190556040518181527f94a97bfc9c7a83fe5f75c66931ca7d2d16372fdc244afc5db36044f3ca52a520906020015b60405180910390a150565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60fe546120219033906001600160a01b031661355c565b6101098190556040518181527f4ab6bf3c94e4c92b7b93e89e984ef66d28392f440a58d91d244b6c303e85f04690602001611fd4565b60fb5460ff161561207b57604051632178bc4d60e11b815260040160405180910390fd5b6120836131f0565b60fb54610100900460ff166120aa5760405162ff240360e21b815260040160405180910390fd5b60008060006120b76138c8565b925092509250610bac838383613776565b60006120d38161328c565b6120dc826133d0565b60fe80546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485906020015b60405180910390a15050565b60008060fe60009054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac9190614798565b604051637526d42960e01b815260ff851660048201526001600160a01b039190911690637526d42990602401602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190614798565b6001600160a01b031663d0c402766040518163ffffffff1660e01b8152600401606060405180830381865afa158015612256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227a91906147b5565b95945050505050565b61228b613716565b33600090815261010f602052604090205460ff166122bc57604051633e2100a160e01b815260040160405180910390fd5b600361010a5410156122e15760405163dfffd22f60e01b815260040160405180910390fd5b6122e96131f0565b4381602001351061230d57604051633bb0413f60e01b815260040160405180910390fd5b600080516020614b0a833981519152600090815261011660209081527fbc6eadc409e9002a7c49dda55566447da97ef8d5367e522b12bf4559b3c929c8546123579184013561421f565b11156123765760405163222ea98560e01b815260040160405180910390fd5b6000612385604083018361441c565b604051602001612396929190614528565b60408051601f1981840301815291905290506000336123b86020850185614189565b8460200135846040516020016123d194939291906146e4565b60408051601f19818403018152919052805160209182012091506000906123fa90850185614189565b84602001358460405160200161241293929190614714565b604051602081830303815290604052805190602001209050600061243683836135e3565b9050337f3b426b614a89830a3d92d8dead18e2ded3cba56101dbff12dddfc1c77b21fbe66124676020880188614189565b602088013561247960408a018a61441c565b4260405161248b9594939291906147e3565b60405180910390a2600261010a546124a391906142e1565b6124ae9060016141df565b8160ff16101580156124e9575061011360006124cd6020880188614189565b60ff1660ff168152602001908152602001600020548560200135115b15611c835760208501803590610113906000906125069089614189565b60ff16815260208082019290925260409081016000209290925560fe5482516306ccb9d760e41b815292516001600160a01b0390911692636ccb9d709260048083019391928290030181865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190614798565b6001600160a01b03166399d055c86125a36020880188614189565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa1580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126059190614798565b6001600160a01b031663264f27f3612620604088018861441c565b6040518363ffffffff1660e01b815260040161263d929190614528565b600060405180830381600087803b15801561265757600080fd5b505af115801561266b573d6000803e3d6000fd5b507f5209293842928a1567d714f34fed8d87769d89d29dfb20f48ea678b02337e84d925061269f9150506020870187614189565b60208701356126b1604089018961441c565b42604051611c7a9594939291906147e3565b6000610e9d600080516020614aca833981519152613510565b6126e4613716565b33600090815261010f602052604090205460ff1661271557604051633e2100a160e01b815260040160405180910390fd5b600361010a54101561273a5760405163dfffd22f60e01b815260040160405180910390fd5b6127426131f0565b4381351061276357604051633bb0413f60e01b815260040160405180910390fd5b6127766108e26080830160608401614189565b8135146127965760405163222ea98560e01b815260040160405180910390fd5b6127a96109dd6080830160608401614189565b8160200135146127cc5760405163b4bf916f60e01b815260040160405180910390fd5b600033602083013560408401356127e96080860160608701614189565b604080516001600160a01b039095166020860152840192909252606083015260ff1660808281019190915283013560a08281019190915283013560c08281019190915283013560e0828101919091528301356101008201526101200160408051601f1981840301815291815281516020928301209250600091840135908401356128796080860160608701614189565b60408051602081019490945283019190915260ff1660608201526080808501359082015260a0808501359082015260c0808501359082015260e080850135908201526101000160408051601f198184030181529181528151602092830120925033917f97f29f2f9a3ad2e8ebffd3fb4a6dbf5035b92b432c8344609b8368407dd233779190860135908601356129156080880160608901614189565b60408051938452602084019290925260ff169082015243606082015260800160405180910390a2600061294883836135e3565b9050600261010a5461295a91906142e1565b6129659060016141df565b8160ff1610612b1d5760fe54604080516306ccb9d760e41b815290516000926001600160a01b031691636ccb9d709160048083019260209291908290030181865afa1580156129b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129dc9190614798565b6001600160a01b0316637526d4296129fa6080880160608901614189565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c9190614798565b604051630d83e4ed60e01b81529091506001600160a01b03821690630d83e4ed90612a8b908890600401614818565b600060405180830381600087803b158015612aa557600080fd5b505af1158015612ab9573d6000803e3d6000fd5b507f4394ee7a4ca89453c6900058c69bfaf14014d9fc4d510ead54ae47ac06d1f05e9250505060208601356040870135612af96080890160608a01614189565b60408051938452602084019290925260ff1690820152436060820152608001611c7a565b505050610c47600160c955565b6000610e9d600080516020614aaa833981519152613510565b60fe54612b5a9033906001600160a01b031661355c565b610c47600080516020614b0a8339815191528261347c565b60fe54604080516306ccb9d760e41b815290516000926001600160a01b031691636ccb9d709160048083019260209291908290030181865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190614798565b604051637526d42960e01b815260ff841660048201526001600160a01b039190911690637526d42990602401602060405180830381865afa158015612c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4d9190614798565b6001600160a01b031663189956a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614877565b60fe54612cc59033906001600160a01b031661355c565b61c4e0811115612ce857604051637d5ba07f60e01b815260040160405180910390fd5b610c47600080516020614aaa8339815191528261347c565b600082815260656020526040902060010154612d1b8161328c565b610bac838361331c565b60fe54612d3c9033906001600160a01b031661355c565b612d45816133d0565b6001600160a01b038116600090815261010f602052604090205460ff1615612d8057604051631adb013360e11b815260040160405180910390fd5b6101095461010d54612d9291906141df565b431015612db25760405163111bb2f160e31b815260040160405180910390fd5b4361010d556001600160a01b038116600090815261010f60205260408120805460ff1916600117905561010a805491612dea83614890565b90915550506040516001600160a01b038216907fff4a290f0500d113133708d378eb9a151c32d91cb8f5778cfda6328d89cfc4b890600090a250565b612e2e6131f0565b60fe546040516318903ee760e21b81523360048201526001600160a01b0390911690636240fb9c90602401602060405180830381865afa158015612e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9a91906148a9565b158015612eb657504361c4e061010c54612eb491906141df565b115b15612ed45760405163111bb2f160e31b815260040160405180910390fd5b60fb805460ff19169055565b6000612eeb8161328c565b61010e805460ff191690556040517ff29e751b3c28b619a215d25fee98a7828471a8e554626186d3f8d122f165029290600090a150565b612f4660405180606001604052806000815260200160008152602001600081525090565b5060408051606081018252610102548152610103546020820152610104549181019190915290565b60fe54612f859033906001600160a01b031661355c565b610c47600080516020614aea8339815191528261347c565b60fe54612fb49033906001600160a01b031661355c565b610c47600080516020614aca8339815191528261347c565b33600090815261010f602052604090205460ff16612ffd57604051633e2100a160e01b815260040160405180910390fd5b600361010a5410156130225760405163dfffd22f60e01b815260040160405180910390fd5b4381351061304357604051633bb0413f60e01b815260040160405180910390fd5b61304b6131d7565b81351461306b5760405163222ea98560e01b815260040160405180910390fd5b60fc5481351161308d5760405162e1442b60e41b815260040160405180910390fd5b604080513360208083019190915283358284018190528351808403850181526060840185528051908301206080808501929092528451808503909201825260a0909301909352825192019190912060006130e783836135e3565b90508060ff16600103613101576131016101156000613f6c565b61310e8460200135613a98565b6040805160208681013582528635908201524381830152905133917f6c291a7ce9906b2982643002c104cb0ba9f2b9fecc8b38e9cc3cf5cfca65b4e8919081900360600190a2600261010a5461316491906142e1565b61316f9060016141df565b8160ff161061141457833560fc55602084013560fd55613190610115613bae565b60fd5560408051602086810135825286359082015243918101919091527fbc1a0795e699bbeaa982f6049ae9689f4d0e3e22d554adb7c46626be62f3b8bc9060600161140b565b6000610e9d600080516020614b2a833981519152613510565b60975460ff1615610b855760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c1d565b61010383905561010482905561010281905560408051828152602081018590529081018390524260608201527ff525f19964f35afcb9a475680bb27abecbc5e62b4d6d4f66a81a5bd7e8a107e390608001610e77565b610c478133613c24565b6132a08282611fdf565b610c305760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556132d83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6133268282611fdf565b15610c305760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61338b613c7d565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020016117b8565b6001600160a01b038116610c475760405163d92e233d60e01b815260040160405180910390fd5b600054610100900460ff16610b855760405162461bcd60e51b8152600401610c1d906148cb565b600054610100900460ff166134455760405162461bcd60e51b8152600401610c1d906148cb565b610b85613cc6565b600054610100900460ff166134745760405162461bcd60e51b8152600401610c1d906148cb565b610b85613cf9565b8060000361349d57604051637036cfc960e11b815260040160405180910390fd5b6000828152610116602052604090205481036134cc5760405163806e577f60e01b815260040160405180910390fd5b6000828152610116602052604090819020829055517f6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d391138906121269083815260200190565b60008181526101166020526040812054808203613540576040516379a715fb60e11b815260040160405180910390fd5b8061354b81436142e1565b6135559190614916565b9392505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c691906148a9565b610c305760405163c4230ae360e01b815260040160405180910390fd5b6000828152610110602052604081205460ff161561361457604051635da1eec160e11b815260040160405180910390fd5b600083815261011060209081526040808320805460ff191660011790558483526101119091528120805460ff169161364b83614935565b82546101009290920a60ff81810219909316918316021790915560009384526101116020526040909320549092169392505050565b6000603082146136a357604051639ca717ed60e01b815260040160405180910390fd5b6040516002906136bc9085908590600090602001614954565b60408051601f19818403018152908290526136d691614972565b602060405180830381855afa1580156136f3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906135559190614877565b600260c954036137685760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c1d565b600260c955565b600160c955565b610103546101045460fe546000926137989290916001600160a01b0316613d20565b60fe549091506000906137b790869086906001600160a01b0316613d20565b9050612710610108546127106137cd919061498e565b6137d79084614916565b6137e191906142e1565b81101580156138175750612710610108546127106137ff91906141df565b6138099084614916565b61381391906142e1565b8111155b6138805760fb805460ff191660019081179091554361010c5561010086905561010185905560ff849055604080519182524260208301527f9dea6ddefbcfcf9c4f6c1c086e462c2ab380c0be199d0289bf23b09f20814415910160405180910390a15050505050565b61171e858585613236565b6138936131f0565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586133b83390565b60008060008060fe60009054906101000a90046001600160a01b03166001600160a01b031663489ed6516040518163ffffffff1660e01b8152600401602060405180830381865afa158015613921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139459190614798565b6001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a691906149bb565b505050915050600060fe60009054906101000a90046001600160a01b03166001600160a01b0316632ca03f666040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a259190614798565b6001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8691906149bb565b50949891975043965090945050505050565b61011580546001818101835560008390527f77886ee853a0f02c8259429c7bfca08679ca3ab8bdec2c3bd5cca8557e06493a90910183905590549003613adb5750565b61011554600090613aee9060019061498e565b90505b60018110158015613b295750610115613b0b60018361498e565b81548110613b1b57613b1b6145fd565b906000526020600020015482105b15613b8957610115613b3c60018361498e565b81548110613b4c57613b4c6145fd565b90600052602060002001546101158281548110613b6b57613b6b6145fd565b60009182526020909120015580613b81816141f2565b915050613af1565b816101158281548110613b9e57613b9e6145fd565b6000918252602090912001555050565b8054600090600283613bc082846142e1565b81548110613bd057613bd06145fd565b9060005260206000200154846002600185613beb919061498e565b613bf591906142e1565b81548110613c0557613c056145fd565b9060005260206000200154613c1a91906141df565b61355591906142e1565b613c2e8282611fdf565b610c3057613c3b81613dbe565b613c46836020613dd0565b604051602001613c57929190614a0b565b60408051601f198184030181529082905262461bcd60e51b8252610c1d91600401614a80565b60975460ff16610b855760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c1d565b600054610100900460ff16613ced5760405162461bcd60e51b8152600401610c1d906148cb565b6097805460ff19169055565b600054610100900460ff1661376f5760405162461bcd60e51b8152600401610c1d906148cb565b600080826001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d859190614877565b90506000851580613d94575084155b613db25784613da38388614916565b613dad91906142e1565b613db4565b815b9695505050505050565b6060610b366001600160a01b03831660145b60606000613ddf836002614916565b613dea9060026141df565b67ffffffffffffffff811115613e0257613e02614a93565b6040519080825280601f01601f191660200182016040528015613e2c576020820181803683370190505b509050600360fc1b81600081518110613e4757613e476145fd565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613e7657613e766145fd565b60200101906001600160f81b031916908160001a9053506000613e9a846002614916565b613ea59060016141df565b90505b6001811115613f1d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613ed957613ed96145fd565b1a60f81b828281518110613eef57613eef6145fd565b60200101906001600160f81b031916908160001a90535060049490941c93613f16816141f2565b9050613ea8565b5083156135555760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c1d565b5080546000825590600052602060002090810190610c4791905b80821115613f9a5760008155600101613f86565b5090565b600060208284031215613fb057600080fd5b81356001600160e01b03198116811461355557600080fd5b600060208284031215613fda57600080fd5b5035919050565b6001600160a01b0381168114610c4757600080fd5b6000806040838503121561400957600080fd5b82359150602083013561401b81613fe1565b809150509250929050565b60006020828403121561403857600080fd5b813561355581613fe1565b9687526001600160801b039586166020880152938516604087015291909316606085015263ffffffff9283166080850152821660a08401521660c082015260e00190565b6000806040838503121561409a57600080fd5b82356140a581613fe1565b9150602083013561401b81613fe1565b600060e082840312156140c757600080fd5b50919050565b6000606082840312156140c757600080fd5b6000602082840312156140f157600080fd5b813567ffffffffffffffff81111561410857600080fd5b614114848285016140cd565b949350505050565b60006020828403121561412e57600080fd5b813567ffffffffffffffff81111561414557600080fd5b820160a0818503121561355557600080fd5b60006060828403121561416957600080fd5b61355583836140cd565b803560ff8116811461418457600080fd5b919050565b60006020828403121561419b57600080fd5b61355582614173565b600061010082840312156140c757600080fd5b6000604082840312156140c757600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610b3657610b366141c9565b600081614201576142016141c9565b506000190190565b634e487b7160e01b600052601260045260246000fd5b60008261422e5761422e614209565b500690565b6001600160801b0381168114610c4757600080fd5b60006020828403121561425a57600080fd5b813561355581614233565b63ffffffff81168114610c4757600080fd5b60006020828403121561428957600080fd5b813561355581614265565b9788526001600160801b039687166020890152948616604088015292909416606086015263ffffffff908116608086015292831660a085015290911660c083015260e08201526101000190565b6000826142f0576142f0614209565b500490565b60008135610b3681614265565b8135815560018101602083013561431881614233565b81546001600160801b0319166001600160801b03821617825550604083013561434081614233565b81546001600160801b031660809190911b6001600160801b03191617905560028101606083013561437081614233565b81546001600160801b0319166001600160801b03821617825550608083013561439881614265565b815463ffffffff60801b191660809190911b63ffffffff60801b161781556143e96143c560a085016142f5565b82805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b610bac6143f860c085016142f5565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b6000808335601e1984360301811261443357600080fd5b83018035915067ffffffffffffffff82111561444e57600080fd5b6020019150600581901b360382131561446657600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b8781101561451b5782840389528135601e198836030181126144d157600080fd5b8701858101903567ffffffffffffffff8111156144ed57600080fd5b8036038213156144fc57600080fd5b61450786828461446d565b9a87019a95505050908401906001016144b0565b5091979650505050505050565b602081526000614114602083018486614496565b60005b8381101561455757818101518382015260200161453f565b50506000910152565b6000815180845261457881602086016020860161453c565b601f01601f19169290920160200192915050565b60018060a01b038416815282602082015260606040820152600061227a6060830184614560565b8281526040602082015260006141146040830184614560565b8581528460208201528360408201526080606082015260006145f2608083018486614496565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261462a57600080fd5b83018035915067ffffffffffffffff82111561464557600080fd5b60200191503681900382131561446657600080fd5b600061ffff808316818103614671576146716141c9565b6001019392505050565b848152836020820152606060408201526000613db4606083018486614496565b6060815260006146af60608301888a614496565b82810360208401526146c2818789614496565b905082810360408401526146d7818587614496565b9998505050505050505050565b60018060a01b038516815260ff84166020820152826040820152608060608201526000613db46080830184614560565b60ff8416815282602082015260606040820152600061227a6060830184614560565b60ff8a16815288602082015260c06040820152600061475960c08301898b614496565b828103606084015261476c81888a614496565b90508281036080840152614781818688614496565b9150508260a08301529a9950505050505050505050565b6000602082840312156147aa57600080fd5b815161355581613fe1565b6000806000606084860312156147ca57600080fd5b8351925060208401519150604084015190509250925092565b60ff86168152846020820152608060408201526000614806608083018587614496565b90508260608301529695505050505050565b813581526020808301359082015260408083013590820152610100810160ff61484360608501614173565b1660608301526080830135608083015260a083013560a083015260c083013560c083015260e083013560e083015292915050565b60006020828403121561488957600080fd5b5051919050565b6000600182016148a2576148a26141c9565b5060010190565b6000602082840312156148bb57600080fd5b8151801515811461355557600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000816000190483118215151615614930576149306141c9565b500290565b600060ff821660ff810361494b5761494b6141c9565b60010192915050565b828482376001600160801b0319919091169101908152601001919050565b6000825161498481846020870161453c565b9190910192915050565b81810381811115610b3657610b366141c9565b805169ffffffffffffffffffff8116811461418457600080fd5b600080600080600060a086880312156149d357600080fd5b6149dc866149a1565b94506020860151935060408601519250606086015191506149ff608087016149a1565b90509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614a4381601785016020880161453c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614a7481602884016020880161453c565b01602801949350505050565b6020815260006135556020830184614560565b634e487b7160e01b600052604160045260246000fdfe783e3ebf40ee443ac9cbca8dc88c9f47450598583c2168f0ae0021de08ad333bedb5588a851185ccd926df348aee898122cd3e827fb7020e3c966fdac62a46af6a7b51c29672c0ed412394a3e65ab758361d7c963b8657ce8c1f43dc0770b1629ae142790790fc18374cd6a6cc28573ecc78841658523afa63055cea42a9e1dd8ec4e223bb52129c3d652c6e55a137389860823d9a02acb9d051e591994c6d6f7607f5053d01557adb731d4aad009009bba2bf77a5b5f779733919451d426336a2646970667358221220900ea997dd75ba1b2dfd7007a3d4306d584119bdf5a6ae0c2e154285c2f4c2d064736f6c63430008100033