60806040526040805190810160405280600481526020017f4b494e4700000000000000000000000000000000000000000000000000000000815250600090805190602001906200005192919062000139565b506040805190810160405280600481526020017f4b494e4700000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062000139565b5068056bc75e2d631000006002556000600855348015620000bf57600080fd5b506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460006101000a81548160ff021916908315150217905550620001e8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017c57805160ff1916838001178555620001ad565b82800160010185558215620001ad579182015b82811115620001ac5782518255916020019190600101906200018f565b5b509050620001bc9190620001c0565b5090565b620001e591905b80821115620001e1576000816000905550600101620001c7565b5090565b90565b61252680620001f86000396000f300608060405260043610610195576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b146101a357806306fdde03146101fa57806310d0ffdd1461028a57806318160ddd146102cb578063220088fa146102f65780632260937314610343578063313ce5671461038457806332dee40b146103b55780633ccfd60b146103f85780634b7503341461040f5780634d9b37351461043a57806356d399e814610465578063688abbf7146104905780636b2f4632146104d357806370a08231146104fe57806376be1585146105555780638328b610146105b05780638620410b146105dd57806387c95058146106085780638cac3b4214610657578063949e8acd1461066157806395d89b411461068c578063a9059cbb1461071c578063b84c824614610781578063c1075329146107ea578063c47f002714610837578063ccc08974146108a0578063e4849b32146108cf578063e9fad8ee146108fc578063f020044f14610913578063f088d54714610942578063fdb5a03e14610978575b6101a034600061098f565b50005b3480156101af57600080fd5b506101e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610da8565b6040518082815260200191505060405180910390f35b34801561020657600080fd5b5061020f610e4a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024f578082015181840152602081019050610234565b50505050905090810190601f16801561027c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029657600080fd5b506102b560048036038101908080359060200190929190505050610ee8565b6040518082815260200191505060405180910390f35b3480156102d757600080fd5b506102e0610f20565b6040518082815260200191505060405180910390f35b34801561030257600080fd5b50610341600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2a565b005b34801561034f57600080fd5b5061036e60048036038101908080359060200190929190505050610fda565b6040518082815260200191505060405180910390f35b34801561039057600080fd5b50610399611023565b604051808260ff1660ff16815260200191505060405180910390f35b3480156103c157600080fd5b506103f6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611028565b005b34801561040457600080fd5b5061040d6110e1565b005b34801561041b57600080fd5b506104246112c7565b6040518082815260200191505060405180910390f35b34801561044657600080fd5b5061044f611325565b6040518082815260200191505060405180910390f35b34801561047157600080fd5b5061047a611393565b6040518082815260200191505060405180910390f35b34801561049c57600080fd5b506104bd600480360381019080803515159060200190929190505050611399565b6040518082815260200191505060405180910390f35b3480156104df57600080fd5b506104e8611405565b6040518082815260200191505060405180910390f35b34801561050a57600080fd5b5061053f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611424565b6040518082815260200191505060405180910390f35b34801561056157600080fd5b50610596600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061146d565b604051808215151515815260200191505060405180910390f35b3480156105bc57600080fd5b506105db6004803603810190808035906020019092919050505061148d565b005b3480156105e957600080fd5b506105f26114fc565b6040518082815260200191505060405180910390f35b34801561061457600080fd5b50610655600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061155a565b005b61065f61161a565b005b34801561066d57600080fd5b50610676611717565b6040518082815260200191505060405180910390f35b34801561069857600080fd5b506106a161172c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106e15780820151818401526020810190506106c6565b50505050905090810190601f16801561070e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561072857600080fd5b50610767600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ca565b604051808215151515815260200191505060405180910390f35b34801561078d57600080fd5b506107e8600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611b33565b005b3480156107f657600080fd5b50610835600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bb2565b005b34801561084357600080fd5b5061089e600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611c85565b005b3480156108ac57600080fd5b506108cd600480360381019080803515159060200190929190505050611d04565b005b3480156108db57600080fd5b506108fa60048036038101908080359060200190929190505050611d86565b005b34801561090857600080fd5b50610911612004565b005b34801561091f57600080fd5b5061092861208d565b604051808215151515815260200191505060405180910390f35b610976600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a0565b005b34801561098457600080fd5b5061098d6120ae565b005b60008060008060008060008060008060011515600460009054906101000a900460ff1615151415156109c057600080fd5b3398506109d18c600a60ff16612245565b97506109e86109e1896003612260565b600a612245565b96506109f4888861229b565b9550610a0188600a612245565b9450610a0f600354866122b4565b600381905550610a1f868661229b565b9550610a2b8c8961229b565b9350610a36846122d2565b92506801000000000000000086029150600083118015610a625750600854610a60846008546122b4565b115b1515610a6d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614158015610ad657508873ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b8015610b235750600254600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15610bb957610b71600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054886122b4565b600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610bd4565b610bc386886122b4565b955068010000000000000000860291505b60006008541115610c3f57610beb600854846122b4565b600881905550600854680100000000000000008702811515610c0957fe5b04600960008282540192505081905550600854680100000000000000008702811515610c3157fe5b048302820382039150610c47565b826008819055505b610c90600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846122b4565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081836009540203905080600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508a73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58e86604051808381526020018281526020019250505060405180910390a382995050505050505050505092915050565b600068010000000000000000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009540203811515610e4257fe5b049050919050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ee05780601f10610eb557610100808354040283529160200191610ee0565b820191906000526020600020905b815481529060010190602001808311610ec357829003601f168201915b505050505081565b600080600080610efc85600a60ff16612245565b9250610f08858461229b565b9150610f13826122d2565b9050809350505050919050565b6000600854905090565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610f8e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610fd4573d6000803e3d6000fd5b50505050565b6000806000806008548511151515610ff157600080fd5b610ffa8561235f565b925061100a83600a60ff16612245565b9150611016838361229b565b9050809350505050919050565b601281565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561108c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc6003549081150290604051600060405180830381858888f193505050501580156110d4573d6000803e3d6000fd5b5060006003819055505050565b60008060011515600460009054906101000a900460ff16151514151561110657600080fd5b60006111126001611399565b11151561111e57600080fd5b33915061112b6000611399565b9050680100000000000000008102600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508061122261121a611405565b60035461229b565b11151561122e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611274573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b600080600080600060085414156112ec576402540be40064174876e80003935061131f565b6112fd670de0b6b3a764000061235f565b925061130d83600a60ff16612245565b9150611319838361229b565b90508093505b50505090565b60008033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561138a57600080fd5b60035491505090565b60025481565b600080339050826113b2576113ad81610da8565b6113fd565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fb82610da8565b015b915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156114f157600080fd5b816002819055505050565b60008060008060006008541415611521576402540be40064174876e800019350611554565b611532670de0b6b3a764000061235f565b925061154283600a60ff16612245565b915061154e83836122b4565b90508093505b50505090565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156115be57600080fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60008033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561167f57600080fd5b34915060008211151561169157600080fd5b6116b56009546008546801000000000000000085028115156116af57fe5b046122b4565b6009819055503373ffffffffffffffffffffffffffffffffffffffff167f81fd6a1682f7db2f8adc4a00458c997e62093d2d0e6c85b4c4c804d30367850383600954604051808381526020018281526020019250505060405180910390a25050565b60008033905061172681611424565b91505090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117c25780601f10611797576101008083540402835291602001916117c2565b820191906000526020600020905b8154815290600101906020018083116117a557829003601f168201915b505050505081565b60008060008060008060011515600460009054906101000a900460ff1615151415156117f557600080fd5b60006117ff611717565b11151561180b57600080fd5b339450600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054871115151561185c57600080fd5b60006118686001611399565b1115611877576118766110e1565b5b61188587600a60ff16612245565b9350611891878561229b565b925061189c8461235f565b91506118a9826002612245565b90506118b7600354826122b4565b6003819055506118c7828261229b565b91506118d56008548561229b565b600881905550611924600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861229b565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b0600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846122b4565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508660095402600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508260095402600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611ab9600954600854680100000000000000008502811515611ab357fe5b046122b4565b6009819055508773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019550505050505092915050565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611b9757600080fd5b8160019080519060200190611bad929190612455565b505050565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611c1657600080fd5b8160035410151515611c2757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611c6d573d6000803e3d6000fd5b50611c7a6003548361229b565b600381905550505050565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611ce957600080fd5b8160009080519060200190611cff929190612455565b505050565b600033905060011515600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d6857600080fd5b81600460006101000a81548160ff0219169083151502179055505050565b600080600080600080600060011515600460009054906101000a900460ff161515141515611db357600080fd5b6000611dbd611717565b111515611dc957600080fd5b339650600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548811151515611e1a57600080fd5b879550611e268661235f565b9450611e3685600a60ff16612245565b9350611e42858561229b565b9250611e4f846002612245565b9150611e5d600354836122b4565b600381905550611e6d848361229b565b9350611e7b6008548761229b565b600881905550611eca600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548761229b565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550680100000000000000008302866009540201905080600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060006008541115611fa457611f9d600954600854680100000000000000008702811515611f9757fe5b046122b4565b6009819055505b8673ffffffffffffffffffffffffffffffffffffffff167fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a311398785604051808381526020018281526020019250505060405180910390a25050505050505050565b60008060011515600460009054906101000a900460ff16151514151561202957600080fd5b339150600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156120815761208081611d86565b5b6120896110e1565b5050565b600460009054906101000a900460ff1681565b6120aa348261098f565b5050565b600080600060011515600460009054906101000a900460ff1615151415156120d557600080fd5b60006120e16001611399565b1115156120ed57600080fd5b6120f76000611399565b9250339150680100000000000000008302600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054830192506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121e883600061098f565b90508173ffffffffffffffffffffffffffffffffffffffff167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080828481151561225357fe5b0490508091505092915050565b60008060008414156122755760009150612294565b828402905082848281151561228657fe5b0414151561229057fe5b8091505b5092915050565b60008282111515156122a957fe5b818303905092915050565b60008082840190508381101515156122c857fe5b8091505092915050565b6000806000670de0b6b3a764000064174876e8000291506008546402540be400612348612342600854866402540be400600202020260026008540a60026402540be4000a02670de0b6b3a76400008a02670de0b6b3a76400006402540be40002600202026002890a01010161240a565b8561229b565b81151561235157fe5b040390508092505050919050565b600080600080670de0b6b3a764000085019250670de0b6b3a7640000600854019150670de0b6b3a76400006123f3670de0b6b3a764000085036402540be400670de0b6b3a7640000868115156123b157fe5b046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a038115156123dc57fe5b046402540be400028115156123ed57fe5b0461229b565b8115156123fc57fe5b049050809350505050919050565b60008060026001840181151561241c57fe5b0490508291505b8181101561244f57809150600281828581151561243c57fe5b040181151561244757fe5b049050612423565b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061249657805160ff19168380011785556124c4565b828001600101855582156124c4579182015b828111156124c35782518255916020019190600101906124a8565b5b5090506124d191906124d5565b5090565b6124f791905b808211156124f35760008160009055506001016124db565b5090565b905600a165627a7a72305820daff297c824d784cfb74125fd8e910fb3e055351577f6a8ee836378a76455cea0029