60806040526040805190810160405280600a81526020017f466f6d6f43756265203200000000000000000000000000000000000000000000815250600090805190602001906200005192919062000195565b506040805190810160405280600481526020017f4355424500000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062000195565b5060006008556001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff021916908315150217905550348015620000e857600080fd5b50604051602080620020918339810180604052810190808051906020019092919050505080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000244565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d857805160ff191683800117855562000209565b8280016001018555821562000209579182015b8281111562000208578251825591602001919060010190620001eb565b5b5090506200021891906200021c565b5090565b6200024191905b808211156200023d57600081600090555060010162000223565b5090565b90565b611e3d80620002546000396000f300608060405260043610610148576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b1461015757806306fdde03146101ae57806310d0ffdd1461023e578063141ea3171461027f57806318160ddd146102ae57806322609373146102d957806322a716b11461031a578063313ce567146103495780633ccfd60b1461037a578063482aede5146103915780634b750334146103d4578063688abbf7146103ff5780636b2f46321461044257806370a082311461046d57806378e97925146104c45780638620410b146104ef578063949e8acd1461051a57806395d89b4114610545578063a9059cbb146105d5578063e4849b321461063a578063e4fc6b6d14610667578063e9fad8ee14610671578063f088d54714610688578063f6a03ebf146106d2578063fdb5a03e146106ff575b61015434600080610716565b50005b34801561016357600080fd5b50610198600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b97565b6040518082815260200191505060405180910390f35b3480156101ba57600080fd5b506101c3610c39565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102035780820151818401526020810190506101e8565b50505050905090810190601f1680156102305780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024a57600080fd5b5061026960048036038101908080359060200190929190505050610cd7565b6040518082815260200191505060405180910390f35b34801561028b57600080fd5b50610294610d0f565b604051808215151515815260200191505060405180910390f35b3480156102ba57600080fd5b506102c3610d22565b6040518082815260200191505060405180910390f35b3480156102e557600080fd5b5061030460048036038101908080359060200190929190505050610d2c565b6040518082815260200191505060405180910390f35b34801561032657600080fd5b5061032f610d75565b604051808215151515815260200191505060405180910390f35b34801561035557600080fd5b5061035e610d88565b604051808260ff1660ff16815260200191505060405180910390f35b34801561038657600080fd5b5061038f610d8d565b005b34801561039d57600080fd5b506103d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611037565b005b3480156103e057600080fd5b506103e96110ee565b6040518082815260200191505060405180910390f35b34801561040b57600080fd5b5061042c60048036038101908080351515906020019092919050505061114c565b6040518082815260200191505060405180910390f35b34801561044e57600080fd5b506104576111b8565b6040518082815260200191505060405180910390f35b34801561047957600080fd5b506104ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d7565b6040518082815260200191505060405180910390f35b3480156104d057600080fd5b506104d9611220565b6040518082815260200191505060405180910390f35b3480156104fb57600080fd5b50610504611226565b6040518082815260200191505060405180910390f35b34801561052657600080fd5b5061052f611284565b6040518082815260200191505060405180910390f35b34801561055157600080fd5b5061055a611299565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059a57808201518184015260208101905061057f565b50505050905090810190601f1680156105c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105e157600080fd5b50610620600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611337565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b50610665600480360381019080803590602001909291905050506115e6565b005b61066f611981565b005b34801561067d57600080fd5b50610686611a0c565b005b6106bc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a73565b6040518082815260200191505060405180910390f35b3480156106de57600080fd5b506106fd60048036038101908080359060200190929190505050611a87565b005b34801561070b57600080fd5b50610714611b19565b005b6000806000806000806000806107308b600560ff16611c36565b965061073d876003611c36565b95506107498787611c51565b94506107558b88611c51565b935061076084611c6d565b9250680100000000000000008502915060008311801561078c575060085461078a84600854611cfa565b115b151561079757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415801561080057503373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b156108965761084e600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205487611cfa565b600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108b1565b6108a08587611cfa565b945068010000000000000000850291505b6000600854111561091c576108c860085484611cfa565b6008819055506008546801000000000000000086028115156108e657fe5b0460096000828254019250508190555060085468010000000000000000860281151561090e57fe5b048302820382039150610924565b826008819055505b61096d600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611cfa565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081836009540203905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b60cfa34508471467f46e2e4c785fdac290ba7406e041c4defb51e25b07d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610b1257600080fd5b505af1158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b81019080805190602001909291905050508e878e6040518085600019166000191681526020018481526020018381526020018215151515815260200194505050505060405180910390a3829750505050505050509392505050565b600068010000000000000000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009540203811515610c3157fe5b049050919050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ccf5780601f10610ca457610100808354040283529160200191610ccf565b820191906000526020600020905b815481529060010190602001808311610cb257829003601f168201915b505050505081565b600080600080610ceb85600560ff16611c36565b9250610cf78584611c51565b9150610d0282611c6d565b9050809350505050919050565b600b60019054906101000a900460ff1681565b6000600854905090565b6000806000806008548511151515610d4357600080fd5b610d4c85611d1b565b9250610d5c83600560ff16611c36565b9150610d688383611c51565b9050809350505050919050565b600b60009054906101000a900460ff1681565b601281565b6000806000610d9c600161114c565b111515610da857600080fd5b339150610db5600061114c565b9050680100000000000000008102600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ede573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167ee146a145d9955498f2f57f7976f0ca4b04166bcdc744667ff2291e99d43eab600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610fd357600080fd5b505af1158015610fe7573d6000803e3d6000fd5b505050506040513d6020811015610ffd57600080fd5b8101908080519060200190929190505050836040518083600019166000191681526020018281526020019250505060405180910390a25050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561109357600080fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008060006008541415611113576402540be40064174876e800039350611146565b611124670de0b6b3a7640000611d1b565b925061113483600560ff16611c36565b91506111408383611c51565b90508093505b50505090565b600080339050826111655761116081610b97565b6111b0565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ae82610b97565b015b915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a5481565b6000806000806000600854141561124b576402540be40064174876e80001935061127e565b61125c670de0b6b3a7640000611d1b565b925061126c83600560ff16611c36565b91506112788383611cfa565b90508093505b50505090565b600080339050611293816111d7565b91505090565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561132f5780601f106113045761010080835404028352916020019161132f565b820191906000526020600020905b81548152906001019060200180831161131257829003601f168201915b505050505081565b6000806000611344611284565b11151561135057600080fd5b339050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483111515156113a157600080fd5b60006113ad600161114c565b11156113bc576113bb610d8d565b5b611405600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c51565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611491600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611cfa565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260095402600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508260095402600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b60008060008060008060006115f9611284565b11151561160557600080fd5b339550600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054871115151561165657600080fd5b86945061166285611d1b565b935061167284600560ff16611c36565b925061167e8484611c51565b915061168c60085486611c51565b6008819055506116db600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486611c51565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550680100000000000000008202856009540201905080600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550600060085411156117b5576117ae6009546008546801000000000000000086028115156117a857fe5b04611cfa565b6009819055505b8573ffffffffffffffffffffffffffffffffffffffff167f2b1bab0dee4e0a50527886cb13a7c880afb5fde2e72f684c423c27865918c738600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156118aa57600080fd5b505af11580156118be573d6000803e3d6000fd5b505050506040513d60208110156118d457600080fd5b81019080805190602001909291905050508785604051808460001916600019168152602001838152602001828152602001935050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b60011515600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156119e057600080fd5b611a046009546008546801000000000000000034028115156119fe57fe5b04611cfa565b600981905550565b600080339150600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115611a6757611a66816115e6565b5b611a6f610d8d565b5050565b6000611a8134836000610716565b50919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ae357600080fd5b6000600a54141515611af457600080fd5b80600a819055506001600b60016101000a81548160ff02191690831515021790555050565b6000806000611b28600161114c565b111515611b3457600080fd5b611b3e600061114c565b9150339050680100000000000000008202600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054820191506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c318260006001610716565b505050565b6000808284811515611c4457fe5b0490508091505092915050565b6000828211151515611c6257600080fd5b818303905092915050565b6000806000670de0b6b3a764000064174876e8000291506008546402540be400611ce3611cdd600854866402540be400600202020260026008540a60026402540be4000a02670de0b6b3a76400008a02670de0b6b3a76400006402540be40002600202026002890a010101611dc6565b85611c51565b811515611cec57fe5b040390508092505050919050565b6000808284019050838110151515611d1157600080fd5b8091505092915050565b600080600080670de0b6b3a764000085019250670de0b6b3a7640000600854019150670de0b6b3a7640000611daf670de0b6b3a764000085036402540be400670de0b6b3a764000086811515611d6d57fe5b046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a03811515611d9857fe5b046402540be40002811515611da957fe5b04611c51565b811515611db857fe5b049050809350505050919050565b600080600260018401811515611dd857fe5b0490508291505b81811015611e0b578091506002818285811515611df857fe5b0401811515611e0357fe5b049050611ddf565b509190505600a165627a7a72305820e725a5d16701bae6975178b8994150ee6655d83659107d5a36ffe4bd9ffd42fe0029000000000000000000000000006f58215dadb1ed27446aa132b622ebdf5b4cca