SlideShare uma empresa Scribd logo
1 de 199
Baixar para ler offline
Alex Liu
A N E T F L I X E N G I N E E R I N G O R I G I N A L
@stinkydofualiu@netflix.com
codex
conditionaL
ModuleS
Strike bacK
#netflixeverywhere
contents
I. The Problem
II. Codex: Conditional Bundling
III. Scaling for Netflix
IV. Looking to the Future
i. the Problem
It's all about building
JS bundles.
// bundle.js
var a = require('a');
var b = require('b');
bundle.js
// bundle.js
var a = require('a');
var b = require('b');
bundle.js
var bundles = [
'bundle.js'
];
bundle.js
home.jsprofile.jsfeed.js album.js signup.js
home.js profile.js feed.js
signup.js account.js setting.js
album.js photo.js login.js
var bundles = [
'home.js',
'profile.js',
'feed.js',
'signup.js'
'account.js',
'settings.js',
'album.js',
'photo.js',
'login.js'
];
var bundles = [
'home.js',
'profile.js',
'feed.js',
'signup.js'
'account.js',
'settings.js',
'album.js',
'photo.js',
'login.js'
];
/home /profile /feed
var bundles = [
'home.js',
'profile.js',
'feed.js',
'signup.js'
'account.js',
'settings.js',
'album.js',
'photo.js',
'login.js'
];
/home /profile /feed
home.js profile.js feed.js
html5shiv
es5-shim
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
/home
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
/home
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
/home
home.js
NO
var bundles = [
'home.js',
'homeIE.js',
'profile',
'profileIE',
'feed.js',
'feedIE.js'
'signup.js',
'signupIE.js',
...
];
/home
home.js homeIE.js
YESNO
Netflix
AB testing!
AB Test w/ multiple cells
Cells Control (Cell 1) Cell 2 Cell 3
Movie
Cover
Art
AB Test w/ multiple cells
Cells Control (Cell 1) Cell 2 Cell 3
Movie
Cover
Art
14% 6%
Netflix
AB testing!
Netflix
AB testing!
home.js
home.js
newSearch.jsoldSearch.js
home.js
oldSearch.js
home.js
oldSearch.js
home.js
newSearch.js
home.js
newSearch.jsoldSearch.js
home.js
newSearch.jsoldSearch.js
jQuery React~80KB ~120KB
larger bundle size:
• file sizes
• time to download
• memory usage
• time to interactive (TTI)
old school Lego bricks
were generic
new Lego is about
specialization
hard to reuse
specialized bricks
home.js
newSearch.jsoldSearch.js
home.js
newSearch.jsoldSearch.js
home.js
newSearch.jsoldSearch.js
// starting to look like a
// lot of bundles...
var bundles = [
'homeNewSearch.js',
'homeNewSearchIE.js',
'homeOldSearch.js',
'homeOldSearchIE.js',
...
];
// starting to look like a
// lot of bundles...
var bundles = [
'homeNewSearch.js',
'homeNewSearchIE.js',
'homeOldSearch.js',
'homeOldSearchIE.js',
...
];
4x variations
already!
Netflix runs hundreds of
AB tests
Netflix runs hundreds of
AB tests
but we personalize on many
other dimensions too
|S1| ⋅ |S2| ⋅⋅⋅ |Sn| = |S1 × S2 × ⋅⋅⋅ × Sn|
|S1| ⋅ |S2| ⋅⋅⋅ |Sn| = |S1 × S2 × ⋅⋅⋅ × Sn|
3100
= 5.1537752e47
40,000,000,000 bricks to reach the
40,000,000,000 bricks to reach the
7,600,000,000,000,000 bricks to reach
40,000,000,000 bricks to reach the
7,600,000,000,000,000 bricks to reach
Enough bricks to reach 6.7812832e32 times.
that’s a #$*%^ ton of
bundles!
https://xkcd.com/303/
Website's full
bundle is 10MB+
how do we deal with
conditional modules?
ii. codex conditional
Bundling
:
what if we generate
on-demand?
what if we generate
on-demand?
1. identify the UI variation
2. generate the bundle
how do we identify the
UI variation?
AB Tests
AB Tests
AB Tests
truthsnoun, plural [trooth z, trooths]
a bucket of boolean
flags used to build a
personalized Netflix
experience
{
"webfonts": false,
"instantSearch": true,
"socialFeatures": false,
"motionBanner": true,
"html5video": true,
"customScrollbar": true
}
{
"webfonts": false,
"instantSearch": true,
"socialFeatures": false,
"motionBanner": true,
"html5video": true,
"customScrollbar": true
}
inputs and outputs
are NOT 1:1
how do we generate
the bundle?
home.js
newSearch.jsoldSearch.js
// home.js
if (truths.isNewSearch === true) {
require('./newSearch');
} else {
require('./oldSearch');
}
home.js
newSearch.jsoldSearch.js
home.js
newSearch.jsoldSearch.js
conditioncondition
home.js
newSearch.jsoldSearch.js
conditioncondition
conditioncondition
isNewSearch!isNewSearch
// home.js
if (truths.isNewSearch === true) {
require('./newSearch');
} else {
require('./oldSearch');
}
home.js
newSearch.jsoldSearch.js
isNewSearch!isNewSearch
home.js
newSearch.js
newEntryPoint.js
oldSearch.js
!isNewSearch isNewSearch
git
git
git
codex(node.js module)
git
codex
artifact
(node.js module)
artifact
artifact
artifact
{
"home.js": {
"deps": [
"dep1.js",
"dep2.js",
"dep3.js",
],
"conditionalDeps": {
"newSearch.js": {
"name": "isNewSearch",
"value": true
],
"conditionalDeps": {
"newSearch.js": {
"name": "isNewSearch",
"value": true
},
"oldSearch.js": {
"name": "isNewSearch",
"value": false
}
}
}
],
"conditionalDeps": {
"newSearch.js": {
"name": "isNewSearch",
"value": true
},
"oldSearch.js": {
"name": "isNewSearch",
"value": false
}
}
}
it's a conditional map!
web/v1 web/v2 web/v3 web/v4
artifacttruths
<html/>
http://codex.nflxext.com/web/v1/83af
http://codex.nflxext.com/web/v1/83af
<script/>
http://codex.nflxext.com/web/v1/83af
<script/>
http://codex.nflxext.com/web/v1/83af
<script/> <script/>
codex
? i got this!
http://codex.nflxext.com/web/v1/83af
codex
http://codex.nflxext.com/web/v1/83af
http://codex.nflxext.com/{team}/{version}/{truths}
codex
web/v1
http://codex.nflxext.com/web/v1/83af
http://codex.nflxext.com/{team}/{version}/{truths}
codex {
83: newSearchTest,
af: isChrome
}
web/v1
http://codex.nflxext.com/web/v1/83af
http://codex.nflxext.com/{team}/{version}/{truths}
home.js
oldSearch.js
home.js
oldSearch.js
home.js
oldSearch.js
home.js
newSearch.jsoldSearch.js
home.js
home.js
newSearch.jsoldSearch.js
response times <= 80ms
codex
http://codex.nflxext.com/web/v1/83af
<script/>
codex
here
you go
http://codex.nflxext.com/web/v1/83af
<script/> <script/>
codex
cached!
here
you go
http://codex.nflxext.com/web/v1/83af
Recap
• Build Time: build conditional graph (artifact)
• Run Time: apply truths to artifact
• Conditional bundling is transparent, universal, 

configuration free!
iii. Scaling For Netflix
web/v1 web/v2 tv/v5 tv/v7
Storage Metadata
Amazon S3
Amazon
DynamoDB
Storage Metadata
Build Time: Codex Artifact Management
web/v1
Build Time: Codex Artifact Management
web/v1
web/v1
Build Time: Codex Artifact Management
saved!
SAVED!
web/v1
web/v1
Build Time: Codex Artifact Management
saved!
Build Time: Codex Artifact Management
activate
web/v1 web/v1
activated!
Build Time: Codex Artifact Management
Run Time: Codex Bundler
web/v1
here are the
active build ids
Run Time: Codex Bundler
here are the
artifacts
web/v1
here are the
active build ids
Run Time: Codex Bundler
here are the
artifacts
web/v1
here are the
active build ids
Run Time: Codex Bundler
prod prod-new canary
16GB ought to be
enough for us!__🙂
codex
codex
codex
400+ artifacts!
400+ artifacts!
…and we ran out of memory
32GB ought to be
enough for us!__🤔
800+ artifacts!
800+ artifacts!
…and we ran out of memory
64GB ought to be
enough for us…?__😭
1600+ artifacts!
1600+ artifacts!
…and we ran out of memory. again.
1600+ artifacts!
Our teams will use as
much as we give them.
…and we ran out of memory. again.
Q: What's cheap,
plentiful, and fast
enough?
Q: What's cheap,
plentiful, and fast
enough?
A: Disk.
codex
LevelDB
codex
LevelDB
100% CPU usage.
what's the problem?
~68%
v8::internal::Runtime_ParseJson
codex
LevelDB
codex
LevelDB
JSON.parse
JSON.parse is slow.
And blocks the CPU!
codex
LevelDB
JSON.parse
LRU Cache: Saving the CPU
codex
LevelDB
JSON.parse
LRU Cache: Saving the CPU
codex
LevelDB
JSON.parse
LRU Cache: Saving the CPU
codex
LevelDB
JSON.parse
LRU Cache: Saving the CPU
codex
LevelDB
JSON.parse
LRU Cache: Saving the CPU
Breaking change to
conditional graph
traversal algorithm!
http://codex.nflxext.com/web/v1/83af
http://codex.nflxext.com/web/v1/83af
old algorithm?
new algorithm?
old algorithm?
new algorithm?
http://codex.nflxext.com/1.0.0/web/v1/83af
http://codex.nflxext.com/2.0.0/web/v1/83af
1.0.0
2.0.0
zuul
zuul 1.0.0
2.0.0
zuul 1.0.0
2.0.0
Good for now.
Good for now.
Continue to look for
engineering wins.
What about
operational resiliency?
eu-west-1
us-west-2
us-east-1
eu-west-1
us-west-2
us-east-1
eu-west-1
us-west-2
???
eu-west-1
us-west-2
???
eu-west-1
us-west-2
???
???
???
???
<script/> <script/>
codex
<script/>
codex
???
codex
<script/>
???
Recap
• Management plane necessary at scale
• Performance is critical (TTI)
• Redundancy across 3 AWS zones
• Resilient against CDN failure
iv. Looking To The Future
why not {bundler}?
how do we
support tree
shaking?
don't be afraid to
challenge common
convention.
don't make
assumptions about
the upper limits.
don't optimize before you
understand the system.
use the scientific method:
1. gather data
2. formulate hypothesis
3. test hypothesis
4. repeat

engineer for fault tolerance
Netflix scale is
challenging.
https://www.flickr.com/clement127/
https://www.flickr.com/jose_antonio_hidalgo_jimenez/
https://www.flickr.com/reiterlied/
Lego Photo Credits
Image Credits
Image Credits
Image Credits
Artist: alecive (Alessandro Roncone)
Iconset Homepage: https://github.com/alecive/FlatWoken
Alex Liu aliu@netflix.com @stinkydofu
fin

Mais conteúdo relacionado

Mais procurados

HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
Remy Sharp
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
Tom Croucher
 
Globus toolkit4installationguide
Globus toolkit4installationguideGlobus toolkit4installationguide
Globus toolkit4installationguide
Adarsh Patil
 

Mais procurados (20)

Oracle on AWS RDS Migration - 성기명
Oracle on AWS RDS Migration - 성기명Oracle on AWS RDS Migration - 성기명
Oracle on AWS RDS Migration - 성기명
 
Scripting Embulk Plugins
Scripting Embulk PluginsScripting Embulk Plugins
Scripting Embulk Plugins
 
Container Orchestration with Amazon ECS
Container Orchestration with Amazon ECSContainer Orchestration with Amazon ECS
Container Orchestration with Amazon ECS
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
 
Async servers and clients in Rest.li
Async servers and clients in Rest.liAsync servers and clients in Rest.li
Async servers and clients in Rest.li
 
Building HTTP API's with NodeJS and MongoDB
Building HTTP API's with NodeJS and MongoDBBuilding HTTP API's with NodeJS and MongoDB
Building HTTP API's with NodeJS and MongoDB
 
Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)
 
Big Data Step-by-Step: Infrastructure 2/3: Running R and RStudio on EC2
Big Data Step-by-Step: Infrastructure 2/3: Running R and RStudio on EC2Big Data Step-by-Step: Infrastructure 2/3: Running R and RStudio on EC2
Big Data Step-by-Step: Infrastructure 2/3: Running R and RStudio on EC2
 
Enrique lima azure-it-pro-ps
Enrique lima azure-it-pro-psEnrique lima azure-it-pro-ps
Enrique lima azure-it-pro-ps
 
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
 
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container ServicePlay Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
 
[AWS Dev Day] 실습워크샵 | Amazon EKS 핸즈온 워크샵
 [AWS Dev Day] 실습워크샵 | Amazon EKS 핸즈온 워크샵 [AWS Dev Day] 실습워크샵 | Amazon EKS 핸즈온 워크샵
[AWS Dev Day] 실습워크샵 | Amazon EKS 핸즈온 워크샵
 
Stampede con 2014 cassandra in the real world
Stampede con 2014   cassandra in the real worldStampede con 2014   cassandra in the real world
Stampede con 2014 cassandra in the real world
 
AWS Summit 2013 | Auckland - Your First Week with Amazon EC2
AWS Summit 2013 | Auckland - Your First Week with Amazon EC2AWS Summit 2013 | Auckland - Your First Week with Amazon EC2
AWS Summit 2013 | Auckland - Your First Week with Amazon EC2
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
コンテンツ配信: CloudFront & 名前解決サービス: Route 53 詳細 -ほぼ週刊AWSマイスターシリーズ第3回-
コンテンツ配信: CloudFront & 名前解決サービス: Route 53 詳細 -ほぼ週刊AWSマイスターシリーズ第3回- コンテンツ配信: CloudFront & 名前解決サービス: Route 53 詳細 -ほぼ週刊AWSマイスターシリーズ第3回-
コンテンツ配信: CloudFront & 名前解決サービス: Route 53 詳細 -ほぼ週刊AWSマイスターシリーズ第3回-
 
Running your Java EE 6 applications in the clouds
Running your Java EE 6 applications in the clouds Running your Java EE 6 applications in the clouds
Running your Java EE 6 applications in the clouds
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Globus toolkit4installationguide
Globus toolkit4installationguideGlobus toolkit4installationguide
Globus toolkit4installationguide
 
Working in the multi-cloud with libcloud
Working in the multi-cloud with libcloudWorking in the multi-cloud with libcloud
Working in the multi-cloud with libcloud
 

Destaque

Destaque (6)

Slaying Monoliths with Node and Docker
Slaying Monoliths with Node and DockerSlaying Monoliths with Node and Docker
Slaying Monoliths with Node and Docker
 
Node Interactive Debugging Node.js In Production
Node Interactive Debugging Node.js In ProductionNode Interactive Debugging Node.js In Production
Node Interactive Debugging Node.js In Production
 
Observable Node.js Applications - EnterpriseJS
Observable Node.js Applications - EnterpriseJSObservable Node.js Applications - EnterpriseJS
Observable Node.js Applications - EnterpriseJS
 
Netflix JavaScript Talks - Scaling A/B Testing on Netflix.com with Node.js
Netflix JavaScript Talks - Scaling A/B Testing on Netflix.com with Node.jsNetflix JavaScript Talks - Scaling A/B Testing on Netflix.com with Node.js
Netflix JavaScript Talks - Scaling A/B Testing on Netflix.com with Node.js
 
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is Human
 
Debugging node in prod
Debugging node in prodDebugging node in prod
Debugging node in prod
 

Semelhante a [JSDC 2016] Codex: Conditional Modules Strike Back

Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
Docker, Inc.
 
Asterisk, HTML5 and NodeJS; a world of endless possibilities
Asterisk, HTML5 and NodeJS; a world of endless possibilitiesAsterisk, HTML5 and NodeJS; a world of endless possibilities
Asterisk, HTML5 and NodeJS; a world of endless possibilities
Dan Jenkins
 
D2-超级旺铺
D2-超级旺铺D2-超级旺铺
D2-超级旺铺
supershop
 

Semelhante a [JSDC 2016] Codex: Conditional Modules Strike Back (20)

A story of Netflix and AB Testing in the User Interface using DynamoDB - DAT3...
A story of Netflix and AB Testing in the User Interface using DynamoDB - DAT3...A story of Netflix and AB Testing in the User Interface using DynamoDB - DAT3...
A story of Netflix and AB Testing in the User Interface using DynamoDB - DAT3...
 
Boxen: How to Manage an Army of Laptops
Boxen: How to Manage an Army of LaptopsBoxen: How to Manage an Army of Laptops
Boxen: How to Manage an Army of Laptops
 
Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
Thinking Inside the Container: A Continuous Delivery Story by Maxfield Stewart
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraform
 
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
 
Building Fast, Modern Web Applications with Node.js and CoffeeScript
Building Fast, Modern Web Applications with Node.js and CoffeeScriptBuilding Fast, Modern Web Applications with Node.js and CoffeeScript
Building Fast, Modern Web Applications with Node.js and CoffeeScript
 
Deep Learning with Spark
Deep Learning with SparkDeep Learning with Spark
Deep Learning with Spark
 
Using MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content RepositoryUsing MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content Repository
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
Docker Advanced registry usage
Docker Advanced registry usageDocker Advanced registry usage
Docker Advanced registry usage
 
Getting started with developing Nodejs
Getting started with developing NodejsGetting started with developing Nodejs
Getting started with developing Nodejs
 
Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012Swift Install Workshop - OpenStack Conference Spring 2012
Swift Install Workshop - OpenStack Conference Spring 2012
 
Asterisk, HTML5 and NodeJS; a world of endless possibilities
Asterisk, HTML5 and NodeJS; a world of endless possibilitiesAsterisk, HTML5 and NodeJS; a world of endless possibilities
Asterisk, HTML5 and NodeJS; a world of endless possibilities
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
Testing web APIs
Testing web APIsTesting web APIs
Testing web APIs
 
D2
D2D2
D2
 
D2-超级旺铺
D2-超级旺铺D2-超级旺铺
D2-超级旺铺
 
Performance #5 cpu and battery
Performance #5  cpu and batteryPerformance #5  cpu and battery
Performance #5 cpu and battery
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 

Último

一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
F
 
一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理
F
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
JOHNBEBONYAP1
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Monica Sydney
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Monica Sydney
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 

Último (20)

一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理一比一原版奥兹学院毕业证如何办理
一比一原版奥兹学院毕业证如何办理
 
一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理一比一原版田纳西大学毕业证如何办理
一比一原版田纳西大学毕业证如何办理
 
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime BalliaBallia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
Call girls Service in Ajman 0505086370 Ajman call girls
Call girls Service in Ajman 0505086370 Ajman call girlsCall girls Service in Ajman 0505086370 Ajman call girls
Call girls Service in Ajman 0505086370 Ajman call girls
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime NagercoilNagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
Nagercoil Escorts Service Girl ^ 9332606886, WhatsApp Anytime Nagercoil
 
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call GirlsMira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
 
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
Tadepalligudem Escorts Service Girl ^ 9332606886, WhatsApp Anytime Tadepallig...
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
 
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
APNIC Policy Roundup, presented by Sunny Chendi at the 5th ICANN APAC-TWNIC E...
 
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
20240509 QFM015 Engineering Leadership Reading List April 2024.pdf
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 
Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.Meaning of On page SEO & its process in detail.
Meaning of On page SEO & its process in detail.
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 

[JSDC 2016] Codex: Conditional Modules Strike Back