diff --git a/README.md b/README.md index 30f03b3..07584e4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # Education -## **Ho Chi Minh City University of Technology**, B.E. in Computer Science in Computer Science and Engineering -- HCMC, Vietnam +## **Ho Chi Minh City University of Technology**, B.E. in Computer Science and Engineering -- HCMC, Vietnam Sept 2017 – June 2023 - GPA: 8.0/10 — Academic Excellence Scholarship; Five Good Student Award @@ -24,50 +24,50 @@ Sept 2017 – June 2023 July 2020 – present -Progressed from Game Programming Fresher to Senior Software Engineer. Builds and maintains Java game backends and production tooling with cross-functional work across server, client, QA, and release workflows. +Progressed from Game Programming Fresher to Senior Software Engineer. Focuses on Java game backends, live operations, delivery automation, and collaboration with client, QA, release, and product stakeholders. -- [Chaos Age 2](https://play.google.com/store/apps/details?id=vn.zps.tl2): Sole server developer for a global strategy game; built Java 21 backend modules with Netty/Vert.x, Couchbase, Redis, Kafka, Gradle, and GitLab CI/CD +- [Chaos Age 2](https://play.google.com/store/apps/details?id=vn.zps.tl2): Primary Java server contributor across gameplay, battle sync, matchmaking, payment/webpay, admin tooling, tests, and delivery automation -- Improved delivery quality with JUnit 5/Mockito tests, load-test clients, Docker-based local dependencies, and multi-environment build/deploy pipelines +- Built and maintained Java 21 backend modules with Netty/Vert.x, Couchbase, Redis, Kafka, Gradle, JUnit 5, Mockito, Docker-based local dependencies, and GitLab CI pipelines; used tests around gameplay, payment, and release-critical flows -- Built internal AI-assisted Claude Code skills/plugin marketplace for ZingPlay game-server development, including typed packet-handler scaffolding and framework guidance +- [Burkozel](https://play.google.com/store/apps/details?id=zps.games.burkozel) and [Show](https://play.google.com/store/apps/details?id=zps.games.show): Implemented and maintained backend gameplay events, payment/config updates, tests, metrics, concurrency fixes, live diagnostics, and release support -- [Sky Garden](https://play.google.com/store/apps/details?id=vn.kvtm.js): Maintained production Java server features for a live farm game; handled event logic, web payment fixes, Redis/runtime diagnostics, and release support +- [Sky Garden](https://play.google.com/store/apps/details?id=vn.kvtm.js) / KVTM: Maintained Java server features, web payment fixes, Redis/runtime diagnostics, GM tooling, CI/deploy support, and Godot migration support -- [Show](https://play.google.com/store/apps/details?id=zps.games.show), [Burkozel](https://play.google.com/store/apps/details?id=zps.games.burkozel), and [Bida3D](https://play.google.com/store/apps/details?id=zps.games.bida3d.vn): Delivered server-side gameplay, matchmaking, and client logic across real-time card and pool games +- Built internal Claude Code plugin/skill marketplace and Java game-server scaffolding guidance to standardize packet-handler generation, framework usage, and AI-assisted delivery workflows # Projects -## **[MiTiSrv](https://github.com/tiennm99/mitisrv)** - -2018 – 2025 - -Lightweight Java game server framework using Netty; personal framework for experimenting with reusable multiplayer server architecture. - - - -## **[Test Sharding](https://github.com/tiennm99/test-sharding)** - -2025 - -Java server experiment for sharding with Couchbase replication, Redis replication, and Kafka. - - - ## **[Store Scraper Bot](https://github.com/tiennm99/store-scraper-bot) / [Java original](https://github.com/tiennm99/store-scraper-bot-java)** Nov 2025 – present -Telegram bot for tracking Apple App Store and Google Play metadata updates; original Java version later ported to JavaScript. +Telegram bot for tracking Apple App Store and Google Play metadata changes; originally built in Java, then ported to JavaScript. -## **[Miti99bot](https://github.com/tiennm99/miti99bot)** +## **[Gomoku](https://github.com/tiennm99/gomoku)** 2026 -Go Telegram bot framework deployed serverlessly on AWS Lambda/SAM with Firestore and Gemini integration. +Multiplayer Gomoku game with Go WebSocket backend, protobuf messaging, Docker support, PVP/PVE/spectator modes, and Phaser client. + + + +## **[Rplace](https://github.com/tiennm99/rplace)** + +2026 + +Collaborative pixel-art canvas using Svelte, Hono, Cloudflare Workers, and Durable Object SQLite. + + + +## **[DB Keepalive](https://github.com/tiennm99/db-keepalive)** + +2026 + +Pluggable Go daemon for keeping free-tier database clusters active across Redis, Valkey, PostgreSQL, MySQL, MongoDB, and Couchbase. diff --git a/index.html b/index.html index 3458f57..08535c2 100644 --- a/index.html +++ b/index.html @@ -50,7 +50,7 @@
Sept 2017 – June 2023
July 2020 – present
-Progressed from Game Programming Fresher to Senior Software Engineer. Builds and maintains Java game backends and production tooling with cross-functional work across server, client, QA, and release workflows.
+Progressed from Game Programming Fresher to Senior Software Engineer. Focuses on Java game backends, live operations, delivery automation, and collaboration with client, QA, release, and product stakeholders.
Chaos Age 2: Sole server developer for a global strategy game; built Java 21 backend modules with Netty/Vert.x, Couchbase, Redis, Kafka, Gradle, and GitLab CI/CD
+Chaos Age 2: Primary Java server contributor across gameplay, battle sync, matchmaking, payment/webpay, admin tooling, tests, and delivery automation
Improved delivery quality with JUnit 5/Mockito tests, load-test clients, Docker-based local dependencies, and multi-environment build/deploy pipelines
+Built and maintained Java 21 backend modules with Netty/Vert.x, Couchbase, Redis, Kafka, Gradle, JUnit 5, Mockito, Docker-based local dependencies, and GitLab CI pipelines; used tests around gameplay, payment, and release-critical flows
Built internal AI-assisted Claude Code skills/plugin marketplace for ZingPlay game-server development, including typed packet-handler scaffolding and framework guidance
+Burkozel and Show: Implemented and maintained backend gameplay events, payment/config updates, tests, metrics, concurrency fixes, live diagnostics, and release support
Sky Garden: Maintained production Java server features for a live farm game; handled event logic, web payment fixes, Redis/runtime diagnostics, and release support
+Sky Garden / KVTM: Maintained Java server features, web payment fixes, Redis/runtime diagnostics, GM tooling, CI/deploy support, and Godot migration support
Show, Burkozel, and Bida3D: Delivered server-side gameplay, matchmaking, and client logic across real-time card and pool games
+Built internal Claude Code plugin/skill marketplace and Java game-server scaffolding guidance to standardize packet-handler generation, framework usage, and AI-assisted delivery workflows
2018 – 2025
-Lightweight Java game server framework using Netty; personal framework for experimenting with reusable multiplayer server architecture.
-2025
-Java server experiment for sharding with Couchbase replication, Redis replication, and Kafka.
Nov 2025 – present
-Telegram bot for tracking Apple App Store and Google Play metadata updates; original Java version later ported to JavaScript.
-Telegram bot for tracking Apple App Store and Google Play metadata changes; originally built in Java, then ported to JavaScript.
+2026
-Go Telegram bot framework deployed serverlessly on AWS Lambda/SAM with Firestore and Gemini integration.
+Multiplayer Gomoku game with Go WebSocket backend, protobuf messaging, Docker support, PVP/PVE/spectator modes, and Phaser client.
+2026
+Collaborative pixel-art canvas using Svelte, Hono, Cloudflare Workers, and Durable Object SQLite.
+2026
+Pluggable Go daemon for keeping free-tier database clusters active across Redis, Valkey, PostgreSQL, MySQL, MongoDB, and Couchbase.
Languages: Java, Go, JavaScript/TypeScript, Shell
Frameworks & Libraries: Netty, Vert.x, Spring Boot, JUnit 5, Mockito, Cocos2d-x, Godot
diff --git a/miti99.pdf b/miti99.pdf index e1b1e64..6f52bcd 100644 --- a/miti99.pdf +++ b/miti99.pdf @@ -5,7 +5,7 @@ << /Type /Pages /Count 2 - /Kids [185 0 R 187 0 R] + /Kids [180 0 R 182 0 R] >> endobj @@ -25,7 +25,7 @@ endobj /Last 7 0 R /Count -4 /Title (Tien Nguyen Minh) - /Dest 167 0 R + /Dest 164 0 R >> endobj @@ -34,7 +34,7 @@ endobj /Parent 3 0 R /Next 5 0 R /Title (Education) - /Dest 163 0 R + /Dest 160 0 R >> endobj @@ -44,7 +44,7 @@ endobj /Next 6 0 R /Prev 4 0 R /Title (Experience) - /Dest 164 0 R + /Dest 161 0 R >> endobj @@ -54,7 +54,7 @@ endobj /Next 7 0 R /Prev 5 0 R /Title (Projects) - /Dest 165 0 R + /Dest 162 0 R >> endobj @@ -63,7 +63,7 @@ endobj /Parent 3 0 R /Prev 6 0 R /Title (Skills) - /Dest 166 0 R + /Dest 163 0 R >> endobj @@ -79,14 +79,14 @@ endobj >> /K [11 0 R] /ParentTree << - /Nums [0 136 0 R 1 135 0 R 2 134 0 R 3 133 0 R 4 132 0 R 5 131 0 R 6 130 0 R 7 98 0 R 8 84 0 R 9 78 0 R 10 76 0 R 11 74 0 R 12 65 0 R 13 56 0 R 14 47 0 R 15 43 0 R 16 34 0 R 17 9 0 R 18 10 0 R] + /Nums [0 133 0 R 1 132 0 R 2 131 0 R 3 130 0 R 4 129 0 R 5 128 0 R 6 96 0 R 7 86 0 R 8 84 0 R 9 78 0 R 10 65 0 R 11 61 0 R 12 52 0 R 13 43 0 R 14 34 0 R 15 9 0 R 16 10 0 R] >> - /ParentTreeNextKey 19 + /ParentTreeNextKey 17 >> endobj 9 0 obj -[142 0 R 141 0 R 139 0 R 137 0 R 129 0 R 129 0 R 136 0 R 129 0 R 135 0 R 129 0 R 134 0 R 133 0 R 129 0 R 132 0 R 129 0 R 131 0 R 130 0 R 126 0 R 124 0 R 123 0 R 123 0 R 121 0 R 118 0 R 117 0 R 114 0 R 113 0 R 113 0 R 113 0 R 109 0 R 107 0 R 106 0 R 104 0 R 101 0 R 101 0 R 100 0 R 99 0 R 97 0 R 97 0 R 94 0 R 93 0 R 93 0 R 90 0 R 89 0 R 89 0 R 86 0 R 85 0 R 83 0 R 83 0 R 80 0 R 79 0 R 73 0 R 77 0 R 73 0 R 75 0 R 73 0 R 73 0 R 69 0 R 67 0 R 62 0 R 59 0 R 59 0 R 58 0 R 53 0 R 50 0 R 49 0 R 46 0 R 45 0 R 40 0 R 37 0 R 37 0 R 36 0 R 31 0 R 28 0 R] +[139 0 R 138 0 R 136 0 R 134 0 R 127 0 R 127 0 R 133 0 R 127 0 R 132 0 R 127 0 R 131 0 R 130 0 R 127 0 R 129 0 R 127 0 R 128 0 R 124 0 R 122 0 R 121 0 R 121 0 R 119 0 R 116 0 R 115 0 R 112 0 R 111 0 R 111 0 R 111 0 R 107 0 R 105 0 R 104 0 R 102 0 R 99 0 R 99 0 R 98 0 R 97 0 R 95 0 R 95 0 R 92 0 R 91 0 R 91 0 R 91 0 R 88 0 R 87 0 R 83 0 R 85 0 R 83 0 R 83 0 R 80 0 R 79 0 R 77 0 R 77 0 R 74 0 R 73 0 R 73 0 R 69 0 R 67 0 R 64 0 R 63 0 R 58 0 R 55 0 R 55 0 R 54 0 R 49 0 R 46 0 R 46 0 R 45 0 R 40 0 R 37 0 R 36 0 R 31 0 R 28 0 R 28 0 R] endobj 10 0 obj @@ -98,7 +98,7 @@ endobj /Type /StructElem /S /Document /P 8 0 R - /K [142 0 R 127 0 R 125 0 R 119 0 R 110 0 R 108 0 R 102 0 R 101 0 R 70 0 R 68 0 R 60 0 R 59 0 R 51 0 R 50 0 R 38 0 R 37 0 R 29 0 R 28 0 R 26 0 R 24 0 R 22 0 R 20 0 R 18 0 R 16 0 R 14 0 R 12 0 R] + /K [139 0 R 125 0 R 123 0 R 117 0 R 108 0 R 106 0 R 100 0 R 99 0 R 70 0 R 68 0 R 56 0 R 55 0 R 47 0 R 46 0 R 38 0 R 37 0 R 29 0 R 28 0 R 26 0 R 24 0 R 22 0 R 20 0 R 18 0 R 16 0 R 14 0 R 12 0 R] >> endobj @@ -108,7 +108,7 @@ endobj /S /P /P 11 0 R /K [13 0 R 15] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -118,7 +118,7 @@ endobj /S /Strong /P 12 0 R /K [14] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -128,7 +128,7 @@ endobj /S /P /P 11 0 R /K [15 0 R 13] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -138,7 +138,7 @@ endobj /S /Strong /P 14 0 R /K [12] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -148,7 +148,7 @@ endobj /S /P /P 11 0 R /K [17 0 R 10 11] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -158,7 +158,7 @@ endobj /S /Strong /P 16 0 R /K [9] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -168,7 +168,7 @@ endobj /S /P /P 11 0 R /K [19 0 R 8] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -178,7 +178,7 @@ endobj /S /Strong /P 18 0 R /K [7] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -188,7 +188,7 @@ endobj /S /P /P 11 0 R /K [21 0 R 6] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -198,7 +198,7 @@ endobj /S /Strong /P 20 0 R /K [5] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -208,7 +208,7 @@ endobj /S /P /P 11 0 R /K [23 0 R 4] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -218,7 +218,7 @@ endobj /S /Strong /P 22 0 R /K [3] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -228,7 +228,7 @@ endobj /S /P /P 11 0 R /K [25 0 R 2] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -238,7 +238,7 @@ endobj /S /Strong /P 24 0 R /K [1] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -258,7 +258,7 @@ endobj /S /P /P 26 0 R /K [0] - /Pg 187 0 R + /Pg 182 0 R >> endobj @@ -271,8 +271,8 @@ endobj /O /Layout /Placement /Block >>] - /K [72] - /Pg 185 0 R + /K [70 71] + /Pg 180 0 R >> endobj @@ -299,8 +299,8 @@ endobj /Type /StructElem /S /P /P 30 0 R - /K [71] - /Pg 185 0 R + /K [69] + /Pg 180 0 R >> endobj @@ -329,8 +329,8 @@ endobj /P 33 0 R /K [<< /Type /OBJR - /Pg 185 0 R - /Obj 184 0 R + /Pg 180 0 R + /Obj 179 0 R >> 35 0 R] >> endobj @@ -353,8 +353,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [70] - /Pg 185 0 R + /K [68] + /Pg 180 0 R >> endobj @@ -367,8 +367,8 @@ endobj /O /Layout /Placement /Block >>] - /K [68 69] - /Pg 185 0 R + /K [67] + /Pg 180 0 R >> endobj @@ -395,8 +395,8 @@ endobj /Type /StructElem /S /P /P 39 0 R - /K [67] - /Pg 185 0 R + /K [66] + /Pg 180 0 R >> endobj @@ -414,7 +414,7 @@ endobj /Type /StructElem /S /P /P 41 0 R - /K [47 0 R 46 0 R 43 0 R] + /K [43 0 R] >> endobj @@ -425,8 +425,8 @@ endobj /P 42 0 R /K [<< /Type /OBJR - /Pg 185 0 R - /Obj 183 0 R + /Pg 180 0 R + /Obj 178 0 R >> 44 0 R] >> endobj @@ -449,58 +449,12 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [66] - /Pg 185 0 R + /K [65] + /Pg 180 0 R >> endobj 46 0 obj -<< - /Type /StructElem - /S /Strong - /P 42 0 R - /K [65] - /Pg 185 0 R ->> -endobj - -47 0 obj -<< - /Type /StructElem - /S /Link - /P 42 0 R - /K [<< - /Type /OBJR - /Pg 185 0 R - /Obj 182 0 R - >> 48 0 R] ->> -endobj - -48 0 obj -<< - /Type /StructElem - /S /Strong - /P 47 0 R - /K [49 0 R] ->> -endobj - -49 0 obj -<< - /Type /StructElem - /S /Span - /P 48 0 R - /A [<< - /O /Layout - /TextDecorationType /Underline - >>] - /K [64] - /Pg 185 0 R ->> -endobj - -50 0 obj << /Type /StructElem /S /Span @@ -509,94 +463,94 @@ endobj /O /Layout /Placement /Block >>] - /K [63] - /Pg 185 0 R + /K [63 64] + /Pg 180 0 R +>> +endobj + +47 0 obj +<< + /Type /StructElem + /S /Div + /P 11 0 R + /K [50 0 R 48 0 R] +>> +endobj + +48 0 obj +<< + /Type /StructElem + /S /Div + /P 47 0 R + /K [49 0 R] +>> +endobj + +49 0 obj +<< + /Type /StructElem + /S /P + /P 48 0 R + /K [62] + /Pg 180 0 R +>> +endobj + +50 0 obj +<< + /Type /StructElem + /S /Div + /P 47 0 R + /K [51 0 R] >> endobj 51 0 obj << /Type /StructElem - /S /Div - /P 11 0 R - /K [54 0 R 52 0 R] + /S /P + /P 50 0 R + /K [52 0 R] >> endobj 52 0 obj << /Type /StructElem - /S /Div + /S /Link /P 51 0 R - /K [53 0 R] + /K [<< + /Type /OBJR + /Pg 180 0 R + /Obj 177 0 R + >> 53 0 R] >> endobj 53 0 obj << /Type /StructElem - /S /P + /S /Strong /P 52 0 R - /K [62] - /Pg 185 0 R + /K [54 0 R] >> endobj 54 0 obj -<< - /Type /StructElem - /S /Div - /P 51 0 R - /K [55 0 R] ->> -endobj - -55 0 obj -<< - /Type /StructElem - /S /P - /P 54 0 R - /K [56 0 R] ->> -endobj - -56 0 obj -<< - /Type /StructElem - /S /Link - /P 55 0 R - /K [<< - /Type /OBJR - /Pg 185 0 R - /Obj 181 0 R - >> 57 0 R] ->> -endobj - -57 0 obj -<< - /Type /StructElem - /S /Strong - /P 56 0 R - /K [58 0 R] ->> -endobj - -58 0 obj << /Type /StructElem /S /Span - /P 57 0 R + /P 53 0 R /A [<< /O /Layout /TextDecorationType /Underline >>] /K [61] - /Pg 185 0 R + /Pg 180 0 R >> endobj -59 0 obj +55 0 obj << /Type /StructElem /S /Span @@ -606,53 +560,99 @@ endobj /Placement /Block >>] /K [59 60] - /Pg 185 0 R + /Pg 180 0 R +>> +endobj + +56 0 obj +<< + /Type /StructElem + /S /Div + /P 11 0 R + /K [59 0 R 57 0 R] +>> +endobj + +57 0 obj +<< + /Type /StructElem + /S /Div + /P 56 0 R + /K [58 0 R] +>> +endobj + +58 0 obj +<< + /Type /StructElem + /S /P + /P 57 0 R + /K [58] + /Pg 180 0 R +>> +endobj + +59 0 obj +<< + /Type /StructElem + /S /Div + /P 56 0 R + /K [60 0 R] >> endobj 60 0 obj << /Type /StructElem - /S /Div - /P 11 0 R - /K [63 0 R 61 0 R] + /S /P + /P 59 0 R + /K [65 0 R 64 0 R 61 0 R] >> endobj 61 0 obj << /Type /StructElem - /S /Div + /S /Link /P 60 0 R - /K [62 0 R] + /K [<< + /Type /OBJR + /Pg 180 0 R + /Obj 176 0 R + >> 62 0 R] >> endobj 62 0 obj << /Type /StructElem - /S /P + /S /Strong /P 61 0 R - /K [58] - /Pg 185 0 R + /K [63 0 R] >> endobj 63 0 obj << /Type /StructElem - /S /Div - /P 60 0 R - /K [64 0 R] + /S /Span + /P 62 0 R + /A [<< + /O /Layout + /TextDecorationType /Underline + >>] + /K [57] + /Pg 180 0 R >> endobj 64 0 obj << /Type /StructElem - /S /P - /P 63 0 R - /K [65 0 R] + /S /Strong + /P 60 0 R + /K [56] + /Pg 180 0 R >> endobj @@ -660,11 +660,11 @@ endobj << /Type /StructElem /S /Link - /P 64 0 R + /P 60 0 R /K [<< /Type /OBJR - /Pg 185 0 R - /Obj 180 0 R + /Pg 180 0 R + /Obj 175 0 R >> 66 0 R] >> endobj @@ -687,8 +687,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [57] - /Pg 185 0 R + /K [55] + /Pg 180 0 R >> endobj @@ -707,8 +707,8 @@ endobj /Type /StructElem /S /P /P 68 0 R - /K [56] - /Pg 185 0 R + /K [54] + /Pg 180 0 R >> endobj @@ -721,7 +721,7 @@ endobj /O /List /ListNumbering /Circle >>] - /K [95 0 R 91 0 R 87 0 R 81 0 R 71 0 R] + /K [93 0 R 89 0 R 81 0 R 75 0 R 71 0 R] >> endobj @@ -730,7 +730,7 @@ endobj /Type /StructElem /S /LI /P 70 0 R - /K [80 0 R 72 0 R] + /K [74 0 R 72 0 R] >> endobj @@ -748,62 +748,46 @@ endobj /Type /StructElem /S /P /P 72 0 R - /K [78 0 R 50 76 0 R 52 74 0 R 54 55] - /Pg 185 0 R + /K [52 53] + /Pg 180 0 R >> endobj 74 0 obj << /Type /StructElem - /S /Link - /P 73 0 R - /K [<< - /Type /OBJR - /Pg 185 0 R - /Obj 179 0 R - >> 75 0 R] + /S /Lbl + /P 71 0 R + /K [51] + /Pg 180 0 R >> endobj 75 0 obj << /Type /StructElem - /S /Span - /P 74 0 R - /A [<< - /O /Layout - /TextDecorationType /Underline - >>] - /K [53] - /Pg 185 0 R + /S /LI + /P 70 0 R + /K [80 0 R 76 0 R] >> endobj 76 0 obj << /Type /StructElem - /S /Link - /P 73 0 R - /K [<< - /Type /OBJR - /Pg 185 0 R - /Obj 178 0 R - >> 77 0 R] + /S /LBody + /P 75 0 R + /K [77 0 R] >> endobj 77 0 obj << /Type /StructElem - /S /Span + /S /P /P 76 0 R - /A [<< - /O /Layout - /TextDecorationType /Underline - >>] - /K [51] - /Pg 185 0 R + /K [78 0 R 49 50] + /Pg 180 0 R >> endobj @@ -811,11 +795,11 @@ endobj << /Type /StructElem /S /Link - /P 73 0 R + /P 77 0 R /K [<< /Type /OBJR - /Pg 185 0 R - /Obj 177 0 R + /Pg 180 0 R + /Obj 174 0 R >> 79 0 R] >> endobj @@ -829,8 +813,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [49] - /Pg 185 0 R + /K [48] + /Pg 180 0 R >> endobj @@ -838,9 +822,9 @@ endobj << /Type /StructElem /S /Lbl - /P 71 0 R - /K [48] - /Pg 185 0 R + /P 75 0 R + /K [47] + /Pg 180 0 R >> endobj @@ -849,7 +833,7 @@ endobj /Type /StructElem /S /LI /P 70 0 R - /K [86 0 R 82 0 R] + /K [88 0 R 82 0 R] >> endobj @@ -867,8 +851,8 @@ endobj /Type /StructElem /S /P /P 82 0 R - /K [84 0 R 46 47] - /Pg 185 0 R + /K [86 0 R 43 84 0 R 45 46] + /Pg 180 0 R >> endobj @@ -879,8 +863,8 @@ endobj /P 83 0 R /K [<< /Type /OBJR - /Pg 185 0 R - /Obj 176 0 R + /Pg 180 0 R + /Obj 173 0 R >> 85 0 R] >> endobj @@ -894,163 +878,152 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [45] - /Pg 185 0 R + /K [44] + /Pg 180 0 R >> endobj 86 0 obj << /Type /StructElem - /S /Lbl - /P 81 0 R - /K [44] - /Pg 185 0 R + /S /Link + /P 83 0 R + /K [<< + /Type /OBJR + /Pg 180 0 R + /Obj 172 0 R + >> 87 0 R] >> endobj 87 0 obj << /Type /StructElem - /S /LI - /P 70 0 R - /K [90 0 R 88 0 R] + /S /Span + /P 86 0 R + /A [<< + /O /Layout + /TextDecorationType /Underline + >>] + /K [42] + /Pg 180 0 R >> endobj 88 0 obj << /Type /StructElem - /S /LBody - /P 87 0 R - /K [89 0 R] + /S /Lbl + /P 81 0 R + /K [41] + /Pg 180 0 R >> endobj 89 0 obj << /Type /StructElem - /S /P - /P 88 0 R - /K [42 43] - /Pg 185 0 R + /S /LI + /P 70 0 R + /K [92 0 R 90 0 R] >> endobj 90 0 obj << /Type /StructElem - /S /Lbl - /P 87 0 R - /K [41] - /Pg 185 0 R + /S /LBody + /P 89 0 R + /K [91 0 R] >> endobj 91 0 obj << /Type /StructElem - /S /LI - /P 70 0 R - /K [94 0 R 92 0 R] + /S /P + /P 90 0 R + /K [38 39 40] + /Pg 180 0 R >> endobj 92 0 obj << /Type /StructElem - /S /LBody - /P 91 0 R - /K [93 0 R] + /S /Lbl + /P 89 0 R + /K [37] + /Pg 180 0 R >> endobj 93 0 obj << /Type /StructElem - /S /P - /P 92 0 R - /K [39 40] - /Pg 185 0 R + /S /LI + /P 70 0 R + /K [98 0 R 94 0 R] >> endobj 94 0 obj << /Type /StructElem - /S /Lbl - /P 91 0 R - /K [38] - /Pg 185 0 R + /S /LBody + /P 93 0 R + /K [95 0 R] >> endobj 95 0 obj << /Type /StructElem - /S /LI - /P 70 0 R - /K [100 0 R 96 0 R] + /S /P + /P 94 0 R + /K [96 0 R 35 36] + /Pg 180 0 R >> endobj 96 0 obj << /Type /StructElem - /S /LBody + /S /Link /P 95 0 R - /K [97 0 R] + /K [<< + /Type /OBJR + /Pg 180 0 R + /Obj 171 0 R + >> 97 0 R] >> endobj 97 0 obj << /Type /StructElem - /S /P + /S /Span /P 96 0 R - /K [98 0 R 36 37] - /Pg 185 0 R + /A [<< + /O /Layout + /TextDecorationType /Underline + >>] + /K [34] + /Pg 180 0 R >> endobj 98 0 obj << /Type /StructElem - /S /Link - /P 97 0 R - /K [<< - /Type /OBJR - /Pg 185 0 R - /Obj 175 0 R - >> 99 0 R] + /S /Lbl + /P 93 0 R + /K [33] + /Pg 180 0 R >> endobj 99 0 obj -<< - /Type /StructElem - /S /Span - /P 98 0 R - /A [<< - /O /Layout - /TextDecorationType /Underline - >>] - /K [35] - /Pg 185 0 R ->> -endobj - -100 0 obj -<< - /Type /StructElem - /S /Lbl - /P 95 0 R - /K [34] - /Pg 185 0 R ->> -endobj - -101 0 obj << /Type /StructElem /S /Span @@ -1059,17 +1032,36 @@ endobj /O /Layout /Placement /Block >>] - /K [32 33] - /Pg 185 0 R + /K [31 32] + /Pg 180 0 R +>> +endobj + +100 0 obj +<< + /Type /StructElem + /S /Div + /P 11 0 R + /K [103 0 R 101 0 R] +>> +endobj + +101 0 obj +<< + /Type /StructElem + /S /Div + /P 100 0 R + /K [102 0 R] >> endobj 102 0 obj << /Type /StructElem - /S /Div - /P 11 0 R - /K [105 0 R 103 0 R] + /S /P + /P 101 0 R + /K [30] + /Pg 180 0 R >> endobj @@ -1077,7 +1069,7 @@ endobj << /Type /StructElem /S /Div - /P 102 0 R + /P 100 0 R /K [104 0 R] >> endobj @@ -1087,61 +1079,42 @@ endobj /Type /StructElem /S /P /P 103 0 R - /K [31] - /Pg 185 0 R + /K [105 0 R 29] + /Pg 180 0 R >> endobj 105 0 obj << /Type /StructElem - /S /Div - /P 102 0 R - /K [106 0 R] + /S /Strong + /P 104 0 R + /K [28] + /Pg 180 0 R >> endobj 106 0 obj << /Type /StructElem - /S /P - /P 105 0 R - /K [107 0 R 30] - /Pg 185 0 R + /S /H2 + /P 11 0 R + /T (Experience) + /K [107 0 R] >> endobj 107 0 obj << /Type /StructElem - /S /Strong + /S /P /P 106 0 R - /K [29] - /Pg 185 0 R + /K [27] + /Pg 180 0 R >> endobj 108 0 obj -<< - /Type /StructElem - /S /H2 - /P 11 0 R - /T (Experience) - /K [109 0 R] ->> -endobj - -109 0 obj -<< - /Type /StructElem - /S /P - /P 108 0 R - /K [28] - /Pg 185 0 R ->> -endobj - -110 0 obj << /Type /StructElem /S /L @@ -1150,92 +1123,111 @@ endobj /O /List /ListNumbering /Circle >>] - /K [115 0 R 111 0 R] + /K [113 0 R 109 0 R] +>> +endobj + +109 0 obj +<< + /Type /StructElem + /S /LI + /P 108 0 R + /K [112 0 R 110 0 R] +>> +endobj + +110 0 obj +<< + /Type /StructElem + /S /LBody + /P 109 0 R + /K [111 0 R] >> endobj 111 0 obj << /Type /StructElem - /S /LI + /S /P /P 110 0 R - /K [114 0 R 112 0 R] + /K [24 25 26] + /Pg 180 0 R >> endobj 112 0 obj << /Type /StructElem - /S /LBody - /P 111 0 R - /K [113 0 R] + /S /Lbl + /P 109 0 R + /K [23] + /Pg 180 0 R >> endobj 113 0 obj << /Type /StructElem - /S /P - /P 112 0 R - /K [25 26 27] - /Pg 185 0 R + /S /LI + /P 108 0 R + /K [116 0 R 114 0 R] >> endobj 114 0 obj << /Type /StructElem - /S /Lbl - /P 111 0 R - /K [24] - /Pg 185 0 R + /S /LBody + /P 113 0 R + /K [115 0 R] >> endobj 115 0 obj << /Type /StructElem - /S /LI - /P 110 0 R - /K [118 0 R 116 0 R] + /S /P + /P 114 0 R + /K [22] + /Pg 180 0 R >> endobj 116 0 obj << /Type /StructElem - /S /LBody - /P 115 0 R - /K [117 0 R] + /S /Lbl + /P 113 0 R + /K [21] + /Pg 180 0 R >> endobj 117 0 obj << /Type /StructElem - /S /P - /P 116 0 R - /K [23] - /Pg 185 0 R + /S /Div + /P 11 0 R + /K [120 0 R 118 0 R] >> endobj 118 0 obj << /Type /StructElem - /S /Lbl - /P 115 0 R - /K [22] - /Pg 185 0 R + /S /Div + /P 117 0 R + /K [119 0 R] >> endobj 119 0 obj << /Type /StructElem - /S /Div - /P 11 0 R - /K [122 0 R 120 0 R] + /S /P + /P 118 0 R + /K [20] + /Pg 180 0 R >> endobj @@ -1243,7 +1235,7 @@ endobj << /Type /StructElem /S /Div - /P 119 0 R + /P 117 0 R /K [121 0 R] >> endobj @@ -1253,85 +1245,94 @@ endobj /Type /StructElem /S /P /P 120 0 R - /K [21] - /Pg 185 0 R + /K [122 0 R 18 19] + /Pg 180 0 R >> endobj 122 0 obj << /Type /StructElem - /S /Div - /P 119 0 R - /K [123 0 R] + /S /Strong + /P 121 0 R + /K [17] + /Pg 180 0 R >> endobj 123 0 obj << /Type /StructElem - /S /P - /P 122 0 R - /K [124 0 R 19 20] - /Pg 185 0 R + /S /H2 + /P 11 0 R + /T (Education) + /K [124 0 R] >> endobj 124 0 obj << /Type /StructElem - /S /Strong + /S /P /P 123 0 R - /K [18] - /Pg 185 0 R + /K [16] + /Pg 180 0 R >> endobj 125 0 obj << /Type /StructElem - /S /H2 + /S /Div /P 11 0 R - /T (Education) - /K [126 0 R] + /K [137 0 R 126 0 R] >> endobj 126 0 obj << /Type /StructElem - /S /P + /S /Div /P 125 0 R - /K [17] - /Pg 185 0 R + /K [135 0 R 134 0 R 127 0 R] >> endobj 127 0 obj << /Type /StructElem - /S /Div - /P 11 0 R - /K [140 0 R 128 0 R] + /S /P + /P 126 0 R + /K [4 5 133 0 R 7 132 0 R 9 131 0 R 130 0 R 12 129 0 R 14 128 0 R] + /Pg 180 0 R >> endobj 128 0 obj << /Type /StructElem - /S /Div + /S /Link /P 127 0 R - /K [138 0 R 137 0 R 129 0 R] + /K [15 << + /Type /OBJR + /Pg 180 0 R + /Obj 170 0 R + >>] + /Pg 180 0 R >> endobj 129 0 obj << /Type /StructElem - /S /P - /P 128 0 R - /K [4 5 136 0 R 7 135 0 R 9 134 0 R 133 0 R 12 132 0 R 14 131 0 R 130 0 R] - /Pg 185 0 R + /S /Link + /P 127 0 R + /K [13 << + /Type /OBJR + /Pg 180 0 R + /Obj 169 0 R + >>] + /Pg 180 0 R >> endobj @@ -1339,13 +1340,13 @@ endobj << /Type /StructElem /S /Link - /P 129 0 R - /K [16 << + /P 127 0 R + /K [11 << /Type /OBJR - /Pg 185 0 R - /Obj 174 0 R + /Pg 180 0 R + /Obj 168 0 R >>] - /Pg 185 0 R + /Pg 180 0 R >> endobj @@ -1353,13 +1354,13 @@ endobj << /Type /StructElem /S /Link - /P 129 0 R - /K [15 << + /P 127 0 R + /K [10 << /Type /OBJR - /Pg 185 0 R - /Obj 173 0 R + /Pg 180 0 R + /Obj 167 0 R >>] - /Pg 185 0 R + /Pg 180 0 R >> endobj @@ -1367,13 +1368,13 @@ endobj << /Type /StructElem /S /Link - /P 129 0 R - /K [13 << + /P 127 0 R + /K [8 << /Type /OBJR - /Pg 185 0 R - /Obj 172 0 R + /Pg 180 0 R + /Obj 166 0 R >>] - /Pg 185 0 R + /Pg 180 0 R >> endobj @@ -1381,116 +1382,74 @@ endobj << /Type /StructElem /S /Link - /P 129 0 R - /K [11 << + /P 127 0 R + /K [6 << /Type /OBJR - /Pg 185 0 R - /Obj 171 0 R + /Pg 180 0 R + /Obj 165 0 R >>] - /Pg 185 0 R + /Pg 180 0 R >> endobj 134 0 obj << /Type /StructElem - /S /Link - /P 129 0 R - /K [10 << - /Type /OBJR - /Pg 185 0 R - /Obj 170 0 R + /S /Span + /P 126 0 R + /A [<< + /O /Layout + /Placement /Block >>] - /Pg 185 0 R + /K [3] + /Pg 180 0 R >> endobj 135 0 obj << /Type /StructElem - /S /Link - /P 129 0 R - /K [8 << - /Type /OBJR - /Pg 185 0 R - /Obj 169 0 R - >>] - /Pg 185 0 R + /S /H1 + /P 126 0 R + /T (Tien Nguyen Minh) + /K [136 0 R] >> endobj 136 0 obj << /Type /StructElem - /S /Link - /P 129 0 R - /K [6 << - /Type /OBJR - /Pg 185 0 R - /Obj 168 0 R - >>] - /Pg 185 0 R + /S /P + /P 135 0 R + /K [2] + /Pg 180 0 R >> endobj 137 0 obj << /Type /StructElem - /S /Span - /P 128 0 R - /A [<< - /O /Layout - /Placement /Block - >>] - /K [3] - /Pg 185 0 R + /S /Div + /P 125 0 R + /K [138 0 R] >> endobj 138 0 obj -<< - /Type /StructElem - /S /H1 - /P 128 0 R - /T (Tien Nguyen Minh) - /K [139 0 R] ->> -endobj - -139 0 obj -<< - /Type /StructElem - /S /P - /P 138 0 R - /K [2] - /Pg 185 0 R ->> -endobj - -140 0 obj -<< - /Type /StructElem - /S /Div - /P 127 0 R - /K [141 0 R] ->> -endobj - -141 0 obj << /Type /StructElem /S /Figure - /P 140 0 R + /P 137 0 R /A [<< /O /Layout /Placement /Block >>] /K [1] - /Pg 185 0 R + /Pg 180 0 R >> endobj -142 0 obj +139 0 obj << /Type /StructElem /S /Em @@ -1500,22 +1459,22 @@ endobj /Placement /Block >>] /K [0] - /Pg 185 0 R + /Pg 180 0 R >> endobj -143 0 obj +140 0 obj << /Type /Font /Subtype /Type0 /BaseFont /ZIEOQE+XCharter-Italic-Identity-H /Encoding /Identity-H - /DescendantFonts [144 0 R] - /ToUnicode 147 0 R + /DescendantFonts [141 0 R] + /ToUnicode 144 0 R >> endobj -144 0 obj +141 0 obj << /Type /Font /Subtype /CIDFontType0 @@ -1525,13 +1484,13 @@ endobj /Ordering (Identity) /Supplement 0 >> - /FontDescriptor 146 0 R + /FontDescriptor 143 0 R /DW 0 /W [0 0 500 1 1 498 2 2 525 3 3 370 4 4 333 5 5 278 6 6 553 7 7 516 8 8 523 9 9 424 10 10 287 11 11 556 12 12 447 13 15 556] >> endobj -145 0 obj +142 0 obj << /Length 10 /Filter /FlateDecode @@ -1541,7 +1500,7 @@ x endstream endobj -146 0 obj +143 0 obj << /Type /FontDescriptor /FontName /ZIEOQE+XCharter-Italic @@ -1552,12 +1511,12 @@ endobj /Descent -200 /CapHeight 671 /StemV 95.4 - /CIDSet 145 0 R - /FontFile3 148 0 R + /CIDSet 142 0 R + /FontFile3 145 0 R >> endobj -147 0 obj +144 0 obj << /Length 816 /Type /CMap @@ -1612,7 +1571,7 @@ end endstream endobj -148 0 obj +145 0 obj << /Length 1854 /Filter /FlateDecode @@ -1627,48 +1586,47 @@ x endstream endobj -149 0 obj +146 0 obj << /Type /Font /Subtype /Type0 - /BaseFont /BFAXVW+XCharter-Roman-Identity-H + /BaseFont /FHZFAR+XCharter-Roman-Identity-H /Encoding /Identity-H - /DescendantFonts [150 0 R] - /ToUnicode 153 0 R + /DescendantFonts [147 0 R] + /ToUnicode 150 0 R >> endobj -150 0 obj +147 0 obj << /Type /Font /Subtype /CIDFontType0 - /BaseFont /BFAXVW+XCharter-Roman + /BaseFont /FHZFAR+XCharter-Roman /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> - /FontDescriptor 152 0 R + /FontDescriptor 149 0 R /DW 0 - /W [0 0 500 1 1 597 2 2 280 3 3 491 4 4 568 5 5 278 6 6 713 7 7 523 8 8 569 9 9 495 10 10 866 11 11 564 12 12 556 13 13 539 14 14 382 15 15 444 16 16 507.00003 17 17 494 18 18 321 19 19 334 20 20 771 21 21 576 22 22 738 23 23 632 24 24 278 25 25 618 26 26 843 27 27 500 28 28 556 29 29 942 30 30 282 31 31 517 32 32 278 33 33 446 34 39 556 40 40 565 41 41 481 42 42 539 43 43 848 44 44 604 45 45 551 46 46 500 47 49 556 50 50 590 51 51 694 52 52 558 53 53 639 54 54 319 55 55 1000 56 56 503.00003 57 57 400 58 58 319 59 59 537 60 60 693 61 61 646 62 62 417 63 63 928 64 64 417 65 65 319 66 66 642 67 67 468 68 68 852 69 69 731 70 70 324 71 71 586 72 72 731 73 73 579 74 74 611 75 75 823 76 76 520 77 77 531 78 78 694 79 79 574 80 80 266 81 81 833] + /W [0 0 500 1 1 597 2 2 280 3 3 491 4 4 568 5 5 278 6 6 713 7 7 523 8 8 569 9 9 495 10 10 866 11 11 564 12 12 556 13 13 539 14 14 382 15 15 444 16 16 507.00003 17 17 494 18 18 321 19 19 334 20 20 771 21 21 576 22 22 738 23 23 632 24 24 278 25 25 618 26 26 843 27 27 500 28 28 556 29 29 942 30 30 282 31 31 517 32 32 278 33 33 446 34 39 556 40 40 565 41 41 481 42 42 539 43 43 604 44 44 551 45 45 500 46 48 556 49 49 590 50 50 694 51 51 558 52 52 639 53 53 319 54 54 1000 55 55 503.00003 56 56 400 57 57 319 58 58 537 59 59 693 60 60 646 61 61 417 62 62 928 63 63 417 64 64 319 65 65 642 66 66 468 67 67 852 68 68 731 69 69 324 70 70 586 71 71 731 72 72 611 73 73 823 74 74 694 75 75 520 76 76 579 77 77 574 78 78 266 79 79 833] >> endobj -151 0 obj +148 0 obj << - /Length 13 + /Length 11 /Filter /FlateDecode >> stream -xœûÿ AŠ -· +xœûÿ 6Ó ÷ endstream endobj -152 0 obj +149 0 obj << /Type /FontDescriptor - /FontName /BFAXVW+XCharter-Roman + /FontName /FHZFAR+XCharter-Roman /Flags 131076 /FontBBox [-78 -236 1000 764] /ItalicAngle 0 @@ -1676,14 +1634,14 @@ endobj /Descent -200 /CapHeight 671 /StemV 95.4 - /CIDSet 151 0 R - /FontFile3 154 0 R + /CIDSet 148 0 R + /FontFile3 151 0 R >> endobj -153 0 obj +150 0 obj << - /Length 1760 + /Length 1728 /Type /CMap /WMode 0 >> @@ -1710,7 +1668,7 @@ end def 1 begincodespacerange <0000>