2014 French Open – Girls' Doubles

Barbora Krejčíková and Kateřina Siniaková were the defending champions, having won the event in 2013, but neither player decided to participate this year.

Girls' Doubles
2014 French Open
Champions Ioana Ducu
Ioana Loredana Roșca
Runners-up CiCi Bellis
Markéta Vondroušová
Final score6–1, 5–7, [11–9]

Ioana Ducu and Ioana Loredana Roșca won the title, defeating CiCi Bellis and Markéta Vondroušová in the final, 6–1, 5–7, [11–9].

Seeds

  1. Françoise Abanda / Varvara Flink (first round; withdrew)
  2. Priscilla Hon / Jil Belen Teichmann (second round)
  3. Katie Boulter / Ivana Jorović (first round)
  4. Naiktha Bains / Tornado Alicia Black (semifinals)
  5. Sun Ziyue / You Xiaodi (second round)
  6. Anna Bondár / Fanny Stollár (second round)
  7. CiCi Bellis / Markéta Vondroušová (final)
  8. Anhelina Kalinina / Jeļena Ostapenko (first round)

Draw

Key

Finals

Semifinals Final
          
  Luisa Stefani
Renata Zarazúa
4 3
7 CiCi Bellis
Markéta Vondroušová
6 6
7 CiCi Bellis
Markéta Vondroušová
1 7 [9]
  Ioana Ducu
Ioana Loredana Roșca
6 5 [11]
4 Naiktha Bains
Tornado Alicia Black
3 3
  Ioana Ducu
Ioana Loredana Roșca
6 6

Top half

First round Second round Quarterfinals Semifinals
1 Françoise Abanda
Varvara Flink
  Luisa Stefani
Renata Zarazúa
w/o   L Stefani
R Zarazúa
6 6
  Tami Grende
Raveena Kingsley
6 4 [7]   D Ivanova
K Steffensen
4 3
  Dasha Ivanova
Katrine Steffensen
2 6 [10]   L Stefani
R Zarazúa
4 6 [10]
  Bianca Turati
Zheng Wushuang
2 7 [10]   B Turati
W Zheng
6 2 [4]
  Kimberly Birrell
Greet Minnen
6 5 [5]   B Turati
W Zheng
6 6
  Fiona Ferro
Jana Fett
5 6 [10]   F Ferro
J Fett
4 0
8 Anhelina Kalinina
Jeļena Ostapenko
7 4 [6]   L Stefani
R Zarazúa
4 3
3 Katie Boulter
Ivana Jorović
6 3 [6] 7 C Bellis
M Vondroušová
6 6
  Simona Heinová
Anastasiya Komardina
1 6 [10]   S Heinová
A Komardina
6 6
  Jaqueline Adina Cristian
Olga Fridman
WC T Andrianjafitrimo
E Salas
2 2
WC Tessah Andrianjafitrimo
Emmanuelle Salas
w/o   S Heinová
A Komardina
2 0
  Katarina Jokić
Helen Ploskina
6 2 [10] 7 C Bellis
M Vondroušová
6 6
  María Fernanda Herazo
Leticia Garcia Vidal
4 6 [8]   K Jokić
H Ploskina
2 2
  Viktória Kužmová
Kristína Schmiedlová
1 2 7 C Bellis
M Vondroušová
6 6
7 CiCi Bellis
Markéta Vondroušová
6 6

Bottom half

First round Second round Quarterfinals Semifinals
5 Sun Ziyue
You Xiaodi
6 6
WC Estelle Cascino
Doménica González
3 3 5 Z Sun
X You
2 4
  Usue Maitane Arconada
Kamonwan Buayam
3 3   EG Ruse
I Shymanovich
6 6
  Elena Gabriela Ruse
Iryna Shymanovich
6 6   EG Ruse
I Shymanovich
2 1
  Tereza Mihalíková
Rebecca Šramková
6 3 [11] 4 N Bains
TA Black
6 6
  Anna Kalinskaya
Evgeniya Levashova
1 6 [9]   T Mihalíková
R Šramková
65 6 [7]
WC Lucie Wargnier
Margot Yerolymos
2 3 4 N Bains
TA Black
77 2 [10]
4 Naiktha Bains
Tornado Alicia Black
6 6 4 N Bains
TA Black
3 3
6 Anna Bondár
Fanny Stollár
6 6   I Ducu
IL Roșca
6 6
WC Alice Ramé
Vinciane Rémy
4 4 6 A Bondár
F Stollár
3 6 [11]
  Julia Grabher
Natalia Vikhlyantseva
2 4   P Badosa
A Bolsova Zadoinov
6 3 [13]
  Paula Badosa
Aliona Bolsova Zadoinov
6 6   P Badosa
A Bolsova Zadoinov
1 63
  Ioana Ducu
Ioana Loredana Roșca
4 6 [10]   I Ducu
IL Roșca
6 77
  Sofia Kenin
Kaitlyn McCarthy
6 4 [5]   I Ducu
IL Roșca
6 7
  Sandra Samir
Isabelle Wallace
64 4 2 P Hon
JB Teichmann
1 5
2 Priscilla Hon
Jil Belen Teichmann
77 6
gollark: > `import hashlib`Hashlib is still important!> `for entry, ubq323 in {**globals(), **__builtins__, **sys.__dict__, **locals(), CONSTANT: Entry()}.items():`Iterate over a bunch of things. I think only the builtins and globals are actually used.The stuff under here using `blake2s` stuff is actually written to be ridiculously unportable, to hinder analysis. This caused issues when trying to run it, so I had to hackily patch in the `/local` thing a few minutes before the deadline.> `for PyObject in gc.get_objects():`When I found out that you could iterate over all objects ever, this had to be incorporated somehow. This actually just looks for some random `os` function, and when it finds it loads the obfuscated code.> `F, G, H, I = typing(lookup[7]), typing(lookup[8]), __import__("functools"), lambda h, i, *a: F(G(h, i))`This is just a convoluted way to define `enumerate(range))` in one nice function.> `print(len(lookup), lookup[3], typing(lookup[3])) #`This is what actually loads the obfuscated stuff. I think.> `class int(typing(lookup[0])):`Here we subclass `complex`. `complex` is used for 2D coordinates within the thing, so I added some helper methods, such as `__iter__`, allowing unpacking of complex numbers into real and imaginary parts, `abs`, which generates a complex number a+ai, and `ℝ`, which provvides the floored real parts of two things.> `class Mаtrix:`This is where the magic happens. It actually uses unicode homoglyphs again, for purposes.> `self = typing("dab7d4733079c8be454e64192ce9d20a91571da25fc443249fc0be859b227e5d")`> `rows = gc`I forgot what exactly the `typing` call is looking up, but these aren't used for anything but making the fake type annotations work.> `def __init__(rows: self, self: rows):`This slightly nonidiomatic function simply initializes the matrix's internals from the 2D array used for inputs.> `if 1 > (typing(lookup[1]) in dir(self)):`A convoluted way to get whether something has `__iter__` or not.
gollark: If you guess randomly the chance of getting none right is 35%ish.
gollark: Anyway, going through #12 in order:> `import math, collections, random, gc, hashlib, sys, hashlib, smtplib, importlib, os.path, itertools, hashlib`> `import hashlib`We need some libraries to work with. Hashlib is very important, so to be sure we have hashlib we make sure to keep importing it.> `ℤ = int`> `ℝ = float`> `Row = "__iter__"`Create some aliases for int and float to make it mildly more obfuscated. `Row` is not used directly in anywhere significant.> `lookup = [...]`These are a bunch of hashes used to look up globals/objects. Some of them are not actually used. There is deliberately a comma missing, because of weird python string concattey things.```pythondef aes256(x, X): import hashlib A = bytearray() for Α, Ҙ in zip(x, hashlib.shake_128(X).digest(x.__len__())): A.append(Α ^ Ҙ) import zlib, marshal, hashlib exec(marshal.loads(zlib.decompress(A)))```Obviously, this is not actual AES-256. It is abusing SHAKE-128's variable length digests to implement what is almost certainly an awful stream cipher. The arbitrary-length hash of our key, X, is XORed with the data. Finally, the result of this is decompressed, loaded (as a marshalled function, which is extremely unportable bytecode I believe), and executed. This is only used to load one piece of obfuscated code, which I may explain later.> `class Entry(ℝ):`This is also only used once, in `typing` below. Its `__init__` function implements Rule 110 in a weird and vaguely golfy way involving some sets and bit manipulation. It inherits from float, but I don't think this does much.> `#raise SystemExit(0)`I did this while debugging the rule 110 but I thought it would be fun to leave it in.> `def typing(CONSTANT: __import__("urllib3")):`This is an obfuscated way to look up objects and load our obfuscated code.> `return getattr(Entry, CONSTANT)`I had significant performance problems, so this incorporates a cache. This was cooler™️ than dicts.
gollark: The tiebreaker algorithm is vulnerable to any attack against Boris Johnson's Twitter account.
gollark: I can't actually shut them down, as they run on arbitrary google services.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.