Tokenization

Tidy format

Exploratory

\(n\)-gram

  • Separation of words:
  • New count of words:
  • Network graphics (package igraph):

Modelling

Model SVM Lineal


Call:
svm.default(x = matrixTfidfTrain, y = as.factor(dataTrain$target), scale = TRUE, 
    type = "C-classification", kernel = "linear", cost = 1, probability = TRUE)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  1 

Number of Support Vectors:  2329

Model SVM Radial


Call:
svm.default(x = matrixTfidfTrain, y = as.factor(dataTrain$target), scale = TRUE, 
    type = "C-classification", kernel = "radial", cost = 1, probability = TRUE)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 

Number of Support Vectors:  5086

Acknowledgments

LS0tDQp0aXRsZTogIkNPVklELTE5IFR3ZWV0IENsYXNzaWZpY2F0aW9uIENoYWxsZW5nZSBieSAjWmluZGlXZWVrZW5keiINCmF1dGhvcjogIlNpZGVyZXVzIChMQiBQcml2YXRlOiAwLjMzMTkpIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIGhpZ2hsaWdodDogYnJlZXplZGFyaw0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2NfZmxvYXQ6DQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQ0KICAgICAgY29sbGFwc2VkOiBmYWxzZQ0KLS0tDQoNCjxjZW50ZXI+DQo8aW1nIHNyYyA9ICJpbWcvaW1nMS5wbmciLz4NCjwvY2VudGVyPg0KDQojIFBhY2thZ2VzIG9mIFINCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGlkeXRleHQpDQpsaWJyYXJ5KHdvcmRjbG91ZCkNCmxpYnJhcnkoamNvbG9ycykNCmxpYnJhcnkoaWdyYXBoKQ0KbGlicmFyeShnZ3JhcGgpDQpsaWJyYXJ5KHF1YW50ZWRhKQ0KYGBgDQoNCiMgSW1wb3IgZGF0YQ0KDQpgYGB7cn0NCiMgSW1wb3J0IGRhdGEgdHJhaW4sIHRlc3QgYW5kIHN1Ym1pc3Npb24NCmRhdGFUcmFpbiA8LSByZWFkLmNzdigiZGF0YS91cGRhdGVkX3RyYWluLmNzdiIpDQpkYXRhVGVzdCA8LSByZWFkLmNzdigiZGF0YS91cGRhdGVkX3Rlc3QuY3N2IikNCmRhdGFTYW1wbGVTdWJtIDwtIHJlYWQuY3N2KCJkYXRhL3VwZGF0ZWRfc3MuY3N2IikNCmBgYA0KDQojIEZ1bmN0aW9uIGZvciB0b2tlbml6YXRpb24NCg0KYGBge3J9DQojIEZ1bmN0aW9uIGNsZWFuIHRleHQNCmNsZWFuVGV4dCA8LSBmdW5jdGlvbih0ZXh0KXsNCiAgDQogICMgTG9hZCBsaWJyYXJ5DQogIHN1cHByZXNzTWVzc2FnZXMoc3VwcHJlc3NXYXJuaW5ncyhsaWJyYXJ5KHRtKSkpDQogIA0KICAjIFRva2VuaXplIHRleHQNCiAgdGV4dCA9IGdzdWIoIltbOmNudHJsOl1dIiwgIiAiLCB0ZXh0KQ0KICB0ZXh0ID0gdG9sb3dlcih0ZXh0KQ0KICB0ZXh0ID0gcmVtb3ZlUHVuY3R1YXRpb24odGV4dCkNCiAgdGV4dCA9IHJlbW92ZU51bWJlcnModGV4dCkNCiAgdGV4dCA9IHN0cmlwV2hpdGVzcGFjZSh0ZXh0KQ0KICB0ZXh0ID0gcmVtb3ZlV29yZHModGV4dCwgd29yZHMgPSB0bTo6c3RvcHdvcmRzKGtpbmQgPSAiU01BUlQiKSkNCiAgdGV4dCA9IHN0cl9zcGxpdCh0ZXh0LCAiICIpW1sxXV0gIA0KICB0ZXh0ID0ga2VlcCgueCA9IHRleHQsIC5wID0gZnVuY3Rpb24oeCl7c3RyX2xlbmd0aCh4KSA+IDJ9KQ0KICANCiAgIyBSZXR1cm4NCiAgcmV0dXJuKHRleHQpDQp9DQoNCmBgYA0KDQojIFRva2VuaXphdGlvbg0KDQpgYGB7cn0NCiMgVG9rZW5pemF0aW9uDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGlkeXRleHQpDQoNCiMgRnVuY3Rpb24gY2xlYW5UZXh0KCkgb3ZlciBkYXRhZnJhbWUNCnR3ZWV0c1RyYWluIDwtIGRhdGFUcmFpbiAlPiUgDQogIG11dGF0ZSh0ZXh0VG9rZW5pemUgPSBtYXAoLnggPSB0ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mID0gY2xlYW5UZXh0KSkNCmhlYWQodHdlZXRzVHJhaW4pDQpgYGANCg0KIyBUaWR5IGZvcm1hdA0KDQpgYGB7cn0NCnR3ZWV0c1RyYWluVGlkeSA8LSB0d2VldHNUcmFpbiAlPiUNCiAgc2VsZWN0KC10ZXh0KSAlPiUNCiAgdW5uZXN0KGNvbHMgPSB0ZXh0VG9rZW5pemUpICU+JSANCiAgcmVuYW1lKHRva2VuID0gdGV4dFRva2VuaXplKQ0KaGVhZCh0d2VldHNUcmFpblRpZHkpDQpgYGANCg0KIyBFeHBsb3JhdG9yeQ0KDQojIyBUb3RhbCB3b3JkcyBieSB0YXJnZXQNCg0KYGBge3J9DQp0d2VldHNUcmFpblRpZHkgJT4lIA0KICBncm91cF9ieSh0YXJnZXQpICU+JSANCiAgY291bnQoKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBmYWN0b3IodGFyZ2V0KSwgeSA9IG4pKSArDQogIGdlb21fY29sKGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2xhYmVsKGFlcyhsYWJlbCA9IG4pKSArDQogIGxhYnMoeCA9ICJUYXJnZXQiKQ0KYGBgDQoNCiMjIERpZmZlcmVudCB3b3JkcyBieSB0YXJnZXQNCg0KYGBge3J9DQp0d2VldHNUcmFpblRpZHkgJT4lDQogIHNlbGVjdCh0YXJnZXQsIHRva2VuKSAlPiUNCiAgZGlzdGluY3QoKSAlPiUNCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUNCiAgc3VtbWFyaXNlKHdvcmRzRGlmZmVyZW50cyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoZGF0YSA9IC4sIGFlcyh4ID0gZmFjdG9yKHRhcmdldCksIHkgPSB3b3Jkc0RpZmZlcmVudHMpKSArDQogIGdlb21fY29sKGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX2xhYmVsKGFlcyhsYWJlbCA9IHdvcmRzRGlmZmVyZW50cykpICsNCiAgbGFicyh4ID0gIlRhcmdldCIpDQpgYGANCg0KIyMgQXZlcmFnZSBsZW5ndGggb2YgdHdlZXRzIGJ5IHRhcmdldA0KDQpgYGB7cn0NCnR3ZWV0c1RyYWluVGlkeSU+JQ0KICBncm91cF9ieShJRCwgdGFyZ2V0KSAlPiUNCiAgc3VtbWFyaXNlKGxlbmd0aFR3ZWV0ID0gbigpKSAlPiUgDQogIGdyb3VwX2J5KHRhcmdldCkgJT4lDQogIHN1bW1hcmlzZShtZWFuTGVuZ3RoID0gbWVhbihsZW5ndGhUd2VldCksDQogICAgICAgICAgICBzZExlbmd0aCA9IHNkKGxlbmd0aFR3ZWV0KSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBnZ3Bsb3QoZGF0YSA9IC4sIGFlcyh4ID0gZmFjdG9yKHRhcmdldCksIHkgPSBtZWFuTGVuZ3RoKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAzKSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWFuTGVuZ3RoIC0gc2RMZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgeW1heCA9IG1lYW5MZW5ndGggKyBzZExlbmd0aCksDQogICAgICAgICAgICAgICAgd2lkdGggPSAwLjEpICsNCiAgbGFicyh4ID0gIlRhcmdldCIsDQogICAgICAgeSA9ICJMZW5ndGgiKQ0KYGBgDQoNCiMjIFN0b3Agd29yZHMgbWFudWFsbHkNCg0KYGBge3J9DQojIExpc3Qgc3RvcCB3b3Jkcw0Kd29yZFN0b3AgPC0gYygnbWUnLCAnbXknLCAnbXlzZWxmJywgJ3dlJywgJ291cicsICdvdXJzJywgJ291cnNlbHZlcycsDQogICAgICAgICAgICAgICd5b3UnLCd5b3VyJywgJ3lvdXJzJywgJ3lvdXJzZWxmJywgJ3lvdXJzZWx2ZXMnLCAnaGUnLCAnaGltJywnaGlzJywNCiAgICAgICAgICAgICAgJ2hpbXNlbGYnLCAnc2hlJywgJ2hlcicsICdoZXJzJywgJ2hlcnNlbGYnLCAnaXQnLCAnaXRzJywgJ2l0c2VsZicsDQogICAgICAgICAgICAgICd0aGV5JywgJ3RoZW0nLCAndGhlaXInLCAndGhlaXJzJywgJ3RoZW1zZWx2ZXMnLCAnd2hhdCcsICd3aGljaCcsDQogICAgICAgICAgICAgICd3aG8nLCAnd2hvbScsICd0aGlzJywgJ3RoYXQnLCAndGhlc2UnLCAndGhvc2UnLCAnYW0nLCAnaXMnLCAnYXJlJywNCiAgICAgICAgICAgICAgJ3dhcycsICd3ZXJlJywgJ2JlJywgJ2JlZW4nLCAnYmVpbmcnLCAnaGF2ZScsICdoYXMnLCAnaGFkJywNCiAgICAgICAgICAgICAgJ2hhdmluZycsICdkbycsICdkb2VzJywgJ2RpZCcsICdkb2luZycsICdhJywgJ2FuJywgJ3RoZScsICdhbmQnLA0KICAgICAgICAgICAgICAnYnV0JywgJ2lmJywgJ29yJywgJ2JlY2F1c2UnLCAnYXMnLCAndW50aWwnLCAnd2hpbGUnLCAnb2YnLCAnYXQnLA0KICAgICAgICAgICAgICAnYnknLCAnZm9yJywgJ3dpdGgnLCAnYWJvdXQnLCAnYWdhaW5zdCcsICdiZXR3ZWVuJywgJ2ludG8nLA0KICAgICAgICAgICAgICAndGhyb3VnaCcsICdkdXJpbmcnLCAnYmVmb3JlJywgJ2FmdGVyJywgJ2Fib3ZlJywgJ2JlbG93JywgJ3RvJywNCiAgICAgICAgICAgICAgJ2Zyb20nLCAndXAnLCAnZG93bicsICdpbicsICdvdXQnLCAnb24nLCAnb2ZmJywgJ292ZXInLCAndW5kZXInLA0KICAgICAgICAgICAgICAnYWdhaW4nLCAnZnVydGhlcicsICd0aGVuJywgJ29uY2UnLCAnaGVyZScsICd0aGVyZScsICd3aGVuJywNCiAgICAgICAgICAgICAgJ3doZXJlJywgJ3doeScsICdob3cnLCAnYWxsJywgJ2FueScsICdib3RoJywgJ2VhY2gnLCAnZmV3JywgJ21vcmUnLA0KICAgICAgICAgICAgICAnbW9zdCcsICdvdGhlcicsICdzb21lJywgJ3N1Y2gnLCAnbm8nLCAnbm9yJywgJ25vdCcsICdvbmx5JywgJ293bicsDQogICAgICAgICAgICAgICdzYW1lJywgJ3NvJywgJ3RoYW4nLCAndG9vJywgJ3ZlcnknLCAncycsICd0JywgJ2NhbicsICd3aWxsJywNCiAgICAgICAgICAgICAgJ2p1c3QnLCAnZG9uJywgJ3Nob3VsZCcsICdub3cnLCAnZCcsICdsbCcsICdtJywgJ28nLCAncmUnLCAndmUnLA0KICAgICAgICAgICAgICAneScsICdhaW4nLCAnYXJlbicsICdjb3VsZG4nLCAnZGlkbicsICdkb2VzbicsICdoYWRuJywgJ2hhc24nLA0KICAgICAgICAgICAgICAnaGF2ZW4nLCAnaXNuJywgJ21hJywgJ21pZ2h0bicsICdtdXN0bicsICduZWVkbicsICdzaGFuJywNCiAgICAgICAgICAgICAgJ3Nob3VsZG4nLCAnd2FzbicsICd3ZXJlbicsICd3b24nLCAnd291bGRuJywnaScsICJhbXAiLCAibmV3IiwNCiAgICAgICAgICAgICAgImNvbSIsICJvbmUiKQ0KDQojIEZpbHRlcmluZyBzdG9wIHdvcmRzDQp0d2VldHNUcmFpblRpZHkyIDwtIHR3ZWV0c1RyYWluVGlkeSAlPiUNCiAgZmlsdGVyKCEodG9rZW4gJWluJSB3b3JkU3RvcCkpDQpgYGANCg0KIyMgTW9zdCB1c2VkIHdvcmRzIGJ5IHRhcmdldCAodG9wIDUwKQ0KDQpgYGB7ciwgZmlnLndpZHRoPTksIGZpZy5oZWlnaHQ9OH0NCnR3ZWV0c1RyYWluVGlkeTIgJT4lIA0KICBncm91cF9ieSh0YXJnZXQsIHRva2VuKSAlPiUgDQogIGNvdW50KHRva2VuKSAlPiUNCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUNCiAgdG9wX24oNTAsIG4pICU+JSBhcnJhbmdlKHRhcmdldCwgZGVzYyhuKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIodG9rZW4sIG4pLCB5ID0gbiwgZmlsbCA9IGZhY3Rvcih0YXJnZXQpKSkgKw0KICBmYWNldF93cmFwKH50YXJnZXQsc2NhbGVzID0gImZyZWUiLCBuY29sID0gMikgKw0KICBnZW9tX2NvbChjb2xvciA9ICJibGFjayIpICsNCiAgY29vcmRfZmxpcCgpICArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBsYWJzKHkgPSAiIiwgeCA9ICIiKSArDQogIHNjYWxlX2ZpbGxfamNvbG9ycyhwYWxldHRlID0gInBhbDQiKQ0KYGBgDQoNCiMjIFdvcmRjbG91ZA0KDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTksIGZpZy5oZWlnaHQ9OX0NCndvcmRjbG91ZEN1c3RvbSA8LSBmdW5jdGlvbih0YXJnZXQsIGRhdGEpew0KICBwcmludCh0YXJnZXQpDQogIHdvcmRjbG91ZCh3b3JkcyA9IGRhdGEkdG9rZW4sIGZyZXEgPSBkYXRhJGZyZXF1ZW5jZSwNCiAgICAgICAgICAgIG1heC53b3JkcyA9IDQwMCwgcmFuZG9tLm9yZGVyID0gRkFMU0UsIHJvdC5wZXIgPSAwLjM1LA0KICAgICAgICAgICAgY29sb3JzID0gamNvbG9ycyhwYWxldHRlID0gInBhbDkiKSkNCn0NCg0KZGZUYXJnZXQgPC0gdHdlZXRzVHJhaW5UaWR5MiAlPiUNCiAgZ3JvdXBfYnkodGFyZ2V0LCB0b2tlbikgJT4lDQogIGNvdW50KHRva2VuKSAlPiUNCiAgZ3JvdXBfYnkodGFyZ2V0KSAlPiUNCiAgbXV0YXRlKGZyZXF1ZW5jZSA9IG4gLyBuKCkpICU+JQ0KICBhcnJhbmdlKHRhcmdldCwgZGVzYyhmcmVxdWVuY2UpKSAlPiUgbmVzdCgpIA0KDQp3YWxrMigueCA9IGRmVGFyZ2V0JHRhcmdldCwgLnkgPSBkZlRhcmdldCRkYXRhLCAuZiA9IHdvcmRjbG91ZEN1c3RvbSkNCmBgYA0KDQojIyBDb3JyZWxhdGlvbiBiZXR3ZWVuIHdvcmRzDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBEYXRhIHNwcmVhZA0KdHdlZXRTcHJlYWQgPC0gdHdlZXRzVHJhaW5UaWR5MiAlPiUNCiAgZ3JvdXBfYnkodGFyZ2V0LCB0b2tlbikgJT4lDQogIGNvdW50KHRva2VuKSAlPiUNCiAgc3ByZWFkKGtleSA9IHRhcmdldCwgdmFsdWUgPSBuLCBmaWxsID0gTkEsIGRyb3AgPSBUUlVFKQ0KbmFtZXModHdlZXRTcHJlYWQpIDwtIGMoIlRva2VuIiwgIk5vQ292aWQiLCAiWWVzQ292aWQiKQ0KDQojIEdyYXBoaWNzDQp0d2VldFNwcmVhZCAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBOb0NvdmlkLCB5ID0gWWVzQ292aWQpKSArDQogIGdlb21faml0dGVyKGFscGhhID0gMC4xLCBzaXplID0gMi41LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IFRva2VuKSwgY2hlY2tfb3ZlcmxhcCA9IFRSVUUsIHZqdXN0ID0gMS41KSArDQogIHNjYWxlX3hfbG9nMTAoKSArDQogIHNjYWxlX3lfbG9nMTAoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImRhcmtyZWQiLCBzZSA9IEZBTFNFKQ0KYGBgDQoNCiMjIENvbW1vbiB3b3JkcyBieSB0YXJnZXQNCg0KYGBge3J9DQp3b3Jkc0NvbW1vbiA8LSBpbnRlcnNlY3QodHdlZXRzVHJhaW5UaWR5MiAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcih0YXJnZXQgPT0gMCkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QodG9rZW4pLCB0d2VldHNUcmFpblRpZHkyICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldCA9PSAxKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCh0b2tlbikpICU+JSBucm93KCkNCmNhdCgiVGhlIG51bWJlciBvZiBjb21tb24gd29yZHMgYmV0d2VlbiBZZXNDb3ZpZCBhbmQgTm9Db3ZpZCBpcyIsIHdvcmRzQ29tbW9uKQ0KYGBgDQoNCiMjICRuJC1ncmFtDQoNCmBgYHtyfQ0KIyBGdW5jdGlvbiBjbGVhblRleHQgd2l0aG91dCB0b2tlbml6ZQ0KY2xlYW5UZXh0MiA8LSBmdW5jdGlvbih0ZXh0KXsNCiAgDQogICMgTG9hZCBsaWJyYXJ5DQogIHN1cHByZXNzTWVzc2FnZXMoc3VwcHJlc3NXYXJuaW5ncyhsaWJyYXJ5KHRtKSkpDQogIA0KICAjIFRva2VuaXplIHRleHQNCiAgdGV4dCA9IGdzdWIoIltbOmNudHJsOl1dIiwgIiAiLCB0ZXh0KQ0KICB0ZXh0ID0gdG9sb3dlcih0ZXh0KQ0KICB0ZXh0ID0gcmVtb3ZlUHVuY3R1YXRpb24odGV4dCkNCiAgdGV4dCA9IHJlbW92ZU51bWJlcnModGV4dCkNCiAgdGV4dCA9IHN0cmlwV2hpdGVzcGFjZSh0ZXh0KQ0KICB0ZXh0ID0gcmVtb3ZlV29yZHModGV4dCwgd29yZHMgPSBzdG9wd29yZHMoa2luZCA9ICJTTUFSVCIpKQ0KICANCiAgIyBSZXR1cm4NCiAgcmV0dXJuKHRleHQpDQp9DQoNCiMgYmlncmFtcyAodHdvIHdvcmRzKQ0KYmlHcmFtcyA8LSBkYXRhVHJhaW4gJT4lDQogIG11dGF0ZSh0ZXh0Q2xlYW4gPSBjbGVhblRleHQyKHRleHQpKSAlPiUNCiAgc2VsZWN0KHRleHRDbGVhbikgJT4lDQogIHVubmVzdF90b2tlbnMoaW5wdXQgPSB0ZXh0Q2xlYW4sIG91dHB1dCA9ICJiaWdyYW0iLA0KICAgICAgICAgICAgICAgIHRva2VuID0gIm5ncmFtcyIsIG4gPSAyLCBkcm9wID0gVFJVRSkNCg0KIyBDb3VudA0KYmlHcmFtcyAgJT4lDQogIGNvdW50KGJpZ3JhbSwgc29ydCA9IFRSVUUpDQpgYGANCg0KLSAqKlNlcGFyYXRpb24gb2Ygd29yZHM6KioNCg0KYGBge3J9DQpiaWdyYW1TZXBhcmF0ZSA8LSBiaUdyYW1zICU+JQ0KICBzZXBhcmF0ZShiaWdyYW0sIGMoIndvcmQxIiwgIndvcmQyIiksDQogICAgICAgICAgIHNlcCA9ICIgIikNCmJpZ3JhbVNlcGFyYXRlDQpgYGANCg0KLSAqKk5ldyBjb3VudCBvZiB3b3JkczoqKg0KDQpgYGB7cn0NCiMgRmlsdGVyaW5nIGFueSB3b3JkIHdpdGhpbiBvZiBsaXN0IHN0b3Agd29yZHMgbWFtdWFsbHkNCmJpZ3JhbVNlcGFyYXRlMiA8LSBiaWdyYW1TZXBhcmF0ZSAgJT4lDQogIGZpbHRlcighd29yZDEgJWluJSB3b3JkU3RvcCkgJT4lDQogIGZpbHRlcighd29yZDIgJWluJSB3b3JkU3RvcCkNCg0KIyBKb2luIHdvcmRzDQpiaWdyYW1zSm9pbiA8LSBiaWdyYW1TZXBhcmF0ZTIgJT4lDQogICAgICAgICAgICB1bml0ZShiaWdyYW1zLCB3b3JkMSwgd29yZDIsIHNlcCA9ICIgIikNCg0KIyBOZXcgY291bnQNCmJpZ3JhbXNKb2luICU+JSANCiAgY291bnQoYmlncmFtcywgc29ydCA9IFRSVUUpICU+JSBwcmludChuID0gMjApDQpgYGANCg0KLSAqKk5ldHdvcmsgZ3JhcGhpY3MgKHBhY2thZ2UgYGlncmFwaGApOioqDQoNCmBgYHtyLCBmaWcud2lkdGg9OX0NCmdyYXBoIDwtIGJpZ3JhbXNKb2luICU+JQ0KICBzZXBhcmF0ZShiaWdyYW1zLCBjKCJ3b3JkMSIsICJ3b3JkMiIpLCBzZXAgPSAiICIpICU+JSANCiAgY291bnQod29yZDEsIHdvcmQyLCBzb3J0ID0gVFJVRSkgJT4lDQogIGZpbHRlcihuID49IDEwKSAlPiUgDQogIGdyYXBoX2Zyb21fZGF0YV9mcmFtZShkaXJlY3RlZCA9IEZBTFNFKQ0Kc2V0LnNlZWQoMTIzKQ0KcGxvdChncmFwaCwgdmVydGV4LmxhYmVsLmZvbnQgPSAyLA0KICAgICB2ZXJ0ZXgubGFiZWwuY29sb3IgPSAiYmxhY2siLA0KICAgICB2ZXJ0ZXgubGFiZWwuY2V4ID0gMC43LCBlZGdlLmNvbG9yID0gImdyYXk4NSIpDQpgYGANCg0KIyBNb2RlbGxpbmcNCg0KIyMgVmVjdG9yaXphdGlvbiAqdGYtaWRmKg0KDQotICoqVHdlZXRzIHRyYWluOioqDQoNCmBgYHtyfQ0KIyBDbGVhbiBhbmQgdG9rZW5pdHphdGlvbiB0d2VldHMgdHJhaW4NCmRhdGFUcmFpbiR0ZXh0IDwtIGRhdGFUcmFpbiR0ZXh0ICU+JQ0KICBtYXAoLmYgPSBjbGVhblRleHQpICU+JQ0KICBtYXAoLmYgPSBwYXN0ZSwgY29sbGFwc2UgPSAiICIpICU+JSB1bmxpc3QoKQ0KDQojIERvY3VtZW50LXRlcm0gbWF0cml4IA0KbWF0cml4VHJhaW4gPC0gZGZtKHggPSBkYXRhVHJhaW4kdGV4dCwgcmVtb3ZlID0gd29yZFN0b3ApDQoNCiMgRGVsZXRpbmcgdGVybXMgbGVzcyBvZnRlbiA1DQptYXRyaXhUcmFpbjIgPC0gZGZtX3RyaW0oeCA9IG1hdHJpeFRyYWluLCBtaW5fZG9jZnJlcSA9IDUpDQoNCiMgVmFsdWVzIGNvbnZlcnNpb24gdG8gdGZpZGYNCm1hdHJpeFRmaWRmVHJhaW4gPC0gZGZtX3RmaWRmKG1hdHJpeFRyYWluMiwgc2NoZW1lX3RmID0gInByb3AiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lX2RmID0gImludmVyc2UiKQ0KYGBgDQoNCi0gKipUd2VldHMgdGVzdDoqKg0KDQpgYGB7cn0NCiMgVGVzdA0KZGF0YVRlc3QkdGV4dCA8LSBkYXRhVGVzdCR0ZXh0ICU+JQ0KICBtYXAoLmYgPSBjbGVhblRleHQpICU+JQ0KICBtYXAoLmYgPSBwYXN0ZSwgY29sbGFwc2UgPSAiICIpICU+JSB1bmxpc3QoKQ0KDQojIERpbWVuc2lvbnMNCmRpbVRyYWluIDwtIG1hdHJpeFRmaWRmVHJhaW5ARGltbmFtZXMkZmVhdHVyZXMNCg0KIyBEaWN0aW9uYXJ5IHRvIGxpc3QNCmRpbVRyYWluIDwtIGFzLmxpc3QoZGltVHJhaW4pDQpuYW1lcyhkaW1UcmFpbikgPC0gdW5saXN0KGRpbVRyYWluKQ0KZGltVHJhaW4gPC0gZGljdGlvbmFyeShkaW1UcmFpbikNCg0KIyBQcm95ZWN0aW9uIGRvY3VtZW50cw0KbWF0cml6X3RmaWRmX3Rlc3QgPC0gZGZtKHggPSBkYXRhVGVzdCR0ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkgPSBkaW1UcmFpbikNCm1hdHJpeFRmaWRmVGVzdCA8LSBkZm1fdGZpZGYobWF0cml6X3RmaWRmX3Rlc3QsIHNjaGVtZV90ZiA9ICJwcm9wIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lX2RmID0gImludmVyc2UiKQ0KYGBgDQoNCiMjIE1vZGVsIFNWTSBMaW5lYWwNCg0KYGBge3J9DQpsaWJyYXJ5KGUxMDcxKQ0KbW9kZWxTVk0gPC0gc3ZtKHggPSBtYXRyaXhUZmlkZlRyYWluLCB5ID0gYXMuZmFjdG9yKGRhdGFUcmFpbiR0YXJnZXQpLA0KICAgICAgICAgICAgICAgICAga2VybmVsID0gImxpbmVhciIsIGNvc3QgPSAxLCBzY2FsZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICB0eXBlID0gIkMtY2xhc3NpZmljYXRpb24iLCBwcm9iYWJpbGl0eSA9IFRSVUUpDQptb2RlbFNWTSANCmBgYA0KDQojIyBQcmVkaWN0aW9ucyB0ZXN0DQoNCmBgYHtyfQ0KIyBQcmVkaWN0aW9ucyB0ZXN0IGRhdGENCnByZWRpY3RUZXN0IDwtIHByZWRpY3Qob2JqZWN0ID0gbW9kZWxTVk0sDQogICAgICAgICAgICAgICAgICAgICAgIG5ld2RhdGEgPSBtYXRyaXhUZmlkZlRlc3QsDQogICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5ID0gVFJVRSkNCnByb2JUZXN0IDwtIGFzLmRhdGEuZnJhbWUoYXR0cihwcmVkaWN0VGVzdCwgInByb2JhYmlsaXRpZXMiKSkNCmBgYA0KDQojIyBTdWJtaXNzaW9uDQoNCmBgYHtyfQ0KIyBTdWJtaXNzaW9uDQpkYXRhU2FtcGxlU3VibSA8LSBkYXRhU2FtcGxlU3VibSAlPiUgDQogIHNlbGVjdChJRCkgJT4lIA0KICBjYmluZChwcm9iVGVzdCkNCndyaXRlLmNzdih4ID0gZGF0YVNhbXBsZVN1Ym0sIGZpbGUgPSAiU3VibWlzc2lvbi9TdWJtNy5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KDQojIyBNb2RlbCBTVk0gUmFkaWFsDQoNCmBgYHtyfQ0KbW9kZWxTVk0yIDwtIHN2bSh4ID0gbWF0cml4VGZpZGZUcmFpbiwgeSA9IGFzLmZhY3RvcihkYXRhVHJhaW4kdGFyZ2V0KSwNCiAgICAgICAgICAgICAgICAgIGtlcm5lbCA9ICJyYWRpYWwiLCBjb3N0ID0gMSwgc2NhbGUgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgdHlwZSA9ICJDLWNsYXNzaWZpY2F0aW9uIiwgcHJvYmFiaWxpdHkgPSBUUlVFKQ0KbW9kZWxTVk0yIA0KYGBgDQoNCiMjIFByZWRpY3Rpb25zIHRlc3QNCg0KYGBge3J9DQojIFByZWRpY3Rpb25zIHRlc3QgZGF0YQ0KcHJlZGljdFRlc3QyIDwtIHByZWRpY3Qob2JqZWN0ID0gbW9kZWxTVk0yLA0KICAgICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gbWF0cml4VGZpZGZUZXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eSA9IFRSVUUpDQpwcm9iVGVzdDIgPC0gYXMuZGF0YS5mcmFtZShhdHRyKHByZWRpY3RUZXN0MiwgInByb2JhYmlsaXRpZXMiKSkNCmBgYA0KDQojIyBTdWJtaXNzaW9uDQoNCmBgYHtyfQ0KIyBTdWJtaXNzaW9uDQpkYXRhU2FtcGxlU3VibTIgPC0gZGF0YVNhbXBsZVN1Ym0gJT4lIA0KICBzZWxlY3QoSUQpICU+JSANCiAgY2JpbmQocHJvYlRlc3QyKQ0Kd3JpdGUuY3N2KHggPSBkYXRhU2FtcGxlU3VibTIsIGZpbGUgPSAiU3VibWlzc2lvbi9TdWJtOC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KDQojIEFja25vd2xlZGdtZW50cw0KDQotIFRoZSBlbnRpcmUgZG9jdW1lbnQgd2FzIGJhc2VkIG9uIHRoZSB0ZXh0IG1pbmluZyB0dXRvcmlhbCBmcm9tIFtKb2FxdWluIEFtYXQgUm9kcmlnby5dKGh0dHBzOi8vam9hcXVpbmFtYXRyb2RyaWdvLmdpdGh1Yi5pby9kb2N1bWVudG9zLzM4X1RleHRfbWluaWdfY29uX1JfZWplbXBsb19wcmFjdGljb19Ud2l0dGVyLmh0bWwp